OpenGL:为什么方形纹理占用的内存较少

Sza*_*ak1 8 opengl

问题: 如果存储在方形纹理中而不是长矩形纹理,为什么相同数量的像素会显着减少视频内存?

示例: 我使用glTexImage2D命令创建360个4x16384大小的纹理.内部格式为GL_RGBA.视频内存:1328 MB.

如果我使用相同的数据创建360 256x256纹理,则内存使用量小于100MB.

使用集成的Intel HD4000 GPU.

Nic*_*las 7

这不是纹理是矩形的.这是一个非常的维度.

为了以最佳方式从纹理中选择纹素,硬件将采用所谓的混合.一般的想法是它将重构纹理中的字节,以便在2维中彼此相邻的像素也将是存储器中的邻居.但这样做需要纹理在两个维度上具有一定的最小尺寸.

现在,纹理过滤硬件可以忽略这个最小尺寸,只能从纹理实际尺寸内的像素中获取.但是额外的存储仍然存在,占用空间没有用处.

鉴于您所看到的,英特尔的混合硬件很可能具有32或64像素的基本最小尺寸.

在OpenGL中,除了你在这里所做的之外,没有什么可以检测到这种不协调.

  • 谢谢,刚接触 OpenGL 我不知道 swizzling。实际上,将每个纹理的 4x16384 大小增加到 32x16384 并没有增加内存使用量(第一次增加发生在 64x16384)。这表明 - 正如您所建议的 - 英特尔芯片组的 OpenGL 实现至少为一个方向分配了 32 个像素。我已将您的答案标记为解决方案。 (3认同)