【发布时间】:2011-06-27 14:10:54
【问题描述】:
我想知道是否有一种简单的方法可以(以编程方式)查询以下功能的 GPU OpenGL 限制:
- 最大 2D 纹理大小
- 最大 3D 纹理大小
- 顶点着色器属性的最大数量
- 最大可变浮点数
- 纹理图像单元的数量(在顶点着色器和片段着色器中)
- 绘制缓冲区的最大数量
在编写我的 GPU 研究项目之前,我需要提前知道这些数字。
【问题讨论】:
我想知道是否有一种简单的方法可以(以编程方式)查询以下功能的 GPU OpenGL 限制:
- 最大 2D 纹理大小
- 最大 3D 纹理大小
- 顶点着色器属性的最大数量
- 最大可变浮点数
- 纹理图像单元的数量(在顶点着色器和片段着色器中)
- 绘制缓冲区的最大数量
在编写我的 GPU 研究项目之前,我需要提前知道这些数字。
【问题讨论】:
glGet() 是你的朋友,与:
GL_MAX_3D_TEXTURE_SIZEGL_MAX_TEXTURE_SIZEGL_MAX_VERTEX_ATTRIBS GL_MAX_VARYING_FLOATSGL_MAX_TEXTURE_UNITSGL_MAX_DRAW_BUFFERS例如:
GLint result;
glGetIntegerv(GL_MAX_VARYING_FLOATS, &result);
不太确定您的项目打算实现什么目标,但您可能对OpenCL 感兴趣,如果它是通用计算并且您还没有意识到它。特别是 Cl/GL interop 如果也有图形元素并且您的硬件支持它。
正如 Damon 在实践中在 cmets 中指出的那样,纹理尺寸可能比这更复杂。出现这些问题的原因是,对于某些大小的纹理,渲染可能会从硬件回退到软件,并且还因为纹理的大小取决于所使用的像素格式。要解决此问题,可以使用GL_PROXY_TEXTURE_* with glTexImage*。
【讨论】:
作为对“awoodland”所说内容的补充,如果您仍然不知道...我认为您应该看看 GLEW...
GLEW 提供了高效的运行时机制,用于确定目标平台支持哪些 OpenGL 扩展。
【讨论】: