我想知道是否有一种简单的方法可以查询(以编程方式)GPU OpenGL限制以获得以下功能:
- 最大2D纹理尺寸
- 最大3D纹理尺寸
- 顶点着色器属性的最大数量
- 变化浮子的最大数量
- 纹理图像单元的数量(在顶点着色器和片段着色器中)
- 最大绘制缓冲区数
在编写GPU研究项目之前,我需要事先知道这些数字。
答案 0 :(得分:11)
glGet()是你的朋友,有:
GL_MAX_3D_TEXTURE_SIZE
GL_MAX_TEXTURE_SIZE
GL_MAX_VERTEX_ATTRIBS
GL_MAX_VARYING_FLOATS
GL_MAX_TEXTURE_UNITS
GL_MAX_DRAW_BUFFERS
e.g:
GLint result;
glGetIntegerv(GL_MAX_VARYING_FLOATS, &result);
不太确定您的项目要实现的目标,但如果它是通用计算并且您还没有意识到它,您可能会对OpenCL感兴趣。特别是Cl/GL interop如果还有图形元素,并且您的硬件支持它。
正如Damon在实践中的评论中指出的那样,纹理尺寸可能比这更复杂。出现问题是因为渲染可能会因某些尺寸的纹理而从硬件回退到软件,并且还因为纹理的大小根据所使用的像素格式而变化。要解决此问题,可以使用GL_PROXY_TEXTURE_* with glTexImage*。
答案 1 :(得分:1)
作为“awoodland”所说内容的补充,如果你还不知道......我想你应该看看GLEW ......
GLEW提供了高效的运行时机制,用于确定目标平台上支持哪些OpenGL扩展。