1

我有一个纹理图集,只有少数部分发生了变化,有时会发生这种情况,所以不是每一帧

我的公益组织策略:

  • 创建一个图集大小的 PBO
  • 使用 glMapBufferRange 在 PBO 内指定一个足够大的内存区域,以容纳变化的图块的所有像素
  • 使用 glUnmapBuffer
  • 对每个图块使用 glTexSubImage2D(对当前绑定的 PBO 使用正确的偏移量而不是指针)

问题编号 1)

PBO和Texture Object之间有直接映射吗?所以假设这是地图集

纹理图集

我可以愉快地将以下数据上传到 PBO 吗?

像素数组

问题2)

认为

glPixelStorei(GL_UNPACK_ALIGNMENT, 4);

子图像的对齐方式如何?我应该假设每个图像都与 ATLAS 对齐(1),还是应该假设每个图像都与相同大小的纹理对齐(2)?

对齐图片

假设 1:在上图中,您可以看到红色垂直线(4 字节列)被称为纹理 ATLAS,橙色区域应该是我必须在每行像素之前添加到子图像的填充字节。

假设 2:在每个像素行之前不会有填充,但在每个像素行之后会有一些填充(就像在 RGB8 的普通纹理中,而不是 2 的幂大小)

问题编号 3)

我应该如何更新 miplevel?我是要手动创建和更新所有 miplevel,还是有一种有效的方法让 OpenGL 自己更新 mipmap 级别?

4

0 回答 0