与GL_MAX_TEXTURE_SIZE混淆

时间:2012-03-18 12:14:59

标签: opengl graphics

我想知道GL_MAX_TEXTURE_SIZE变量是否返回一个轴的纹理像素尺寸,或两者都加起来(x,y)。

例如,在我的电脑上我得到了8192。 这是否意味着我可以加载8192 * 8192 * 4(256mb)或4096 * 4096 * 4(64mb)的纹理?如果是这样,为什么当我的显卡有1GB的视频内存时会发生这种情况?

1 个答案:

答案 0 :(得分:18)

OpenGL规范将其称为最大1D / 2D纹理图像尺寸,因此它确实意味着8192x8192 - 图像。好吧,意思是宽度和高度加起来是非常无意义的,因为这没有说明大小,8000x192 - 纹理与4096x4096 - 纹理的大小完全不同。至少乘法会更合理,但在这种情况下,8192意味着~90x90 - 纹理。

但你应该把这些价值观带走。它们实际上只是实现(硬件/驱动程序)允许的上限,因此它不必与硬件的视频内存相匹配。在实践中,视频内存中存储了更多的东西,比如帧缓冲区,VBO,等等,因此给出一些保守的值是非常合理的。同样,它也可能是你的驱动程序开发人员不太注意这个常量(它不是ATI,是吗?)并且只返回一些默认值,你的纹理在实践中实际上可能更大。

就像罗宾逊在评论中所说,它可能还取决于原始内存以外的其他因素,因为纹理内存可能是视频内存中的一些特殊区域,提供了一种特殊的2D寻址/缓存模式。