我想知道 GL_MAX_TEXTURE_SIZE 变体是否返回一个轴的纹理像素尺寸或两者加起来(x,y)。
例如,在我的电脑上,结果是 8192。
这是否意味着我可以加载 8192*8192*4(256mb) 或 4096*4096*4 (64mb) 的纹理?如果是这样,为什么当我的显卡有 1GB 的显存时会发生这种情况??
最佳答案
OpenGL 规范将其称为最大 1D/2D 纹理图像尺寸,因此它确实意味着 8192x8192
-图片。嗯,意思是宽度和高度相加是毫无意义的,因为这并没有说明大小,8000x192
-texture 的大小与 4096x4096
完全不同-质地。至少乘法会更合理,但在这种情况下 8192
将意味着 ~90x90
-质地。
但是您应该对这些值持保留态度。它们实际上只是实现(硬件/驱动程序)允许的上限,因此它不必与您的硬件的视频内存相匹配。实际上,视频内存中存储的东西要多得多,例如帧缓冲区、VBO 等等,因此给出一些保守值是非常合理的。同样,也可能是您的驱动程序开发人员不太注意这个常量(它不是 ATI,是吗?),只是返回一些默认值,实际上您的纹理实际上可以更大。
就像 Robinson 在他的评论中所说的那样,它也可能取决于原始内存以外的其他东西,因为纹理内存可能是视频内存中的某个特殊区域,提供一种特殊的 2D 寻址/缓存模式。
关于opengl - 与 GL_MAX_TEXTURE_SIZE 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758209/