opengl - 与 GL_MAX_TEXTURE_SIZE 混淆

标签 opengl graphics

我想知道 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/

相关文章:

OpenGL GLSL 将颜色作为整数发送到着色器以分解为 vec4 RGBA

iphone - 是否可以实现 MAX(As,Ad) openGL 混合?

iphone - 绘制到 CGImageRef 中

java - 如何将对象从另一个类传递到 PaintComponent 方法中?

Haskell:OpenGL,如何防止窗口立即关闭

c++ - 从带有 opengl 代码的 C++ 转换为带有 GUI 的 QT 应用程序?

c# - 试图设置 VBO :s in C# using TAO and OpenGL TK framework

c++ - 创建类似 OpenGL 的图形库

graphics - 将 3d 球体投影到屏幕上的 2d 圆中

c++ - 计算着色器 - 如何全局同步线程?