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



问题:如果存储在方形纹理中,为什么同样数量的像素占用的视频内存要比存储在长矩形纹理中少得多?

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

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

使用集成的英特尔HD4000 GPU。

这与纹理是矩形无关。这是关于其中一个维度非常小。

为了以最佳的方式从纹理中选择纹理元素,硬件将采用所谓的swizzling。一般的想法是,它将重构纹理中的字节,这样在二维中相邻的像素也将成为内存中的邻居。但这样做需要纹理在两个维度上都具有一定的最小大小。

现在,纹理过滤硬件可以忽略这个最小大小,只从纹理实际大小内的像素中提取。但额外的存储空间仍然存在,占用空间毫无用处。

考虑到你所看到的,英特尔的快速硬件很有可能具有32或64像素的基本最小尺寸。

在OpenGL中,除了您在这里所做的之外,您无法检测这种不一致性。

最新更新