我想知道有没有一种简单的方法(通过编程)查询GPU OpenGL以下功能的限制:
- 最大2D纹理大小
- 最大3D纹理大小
- 最大顶点着色器属性数
- 最大浮点数数量
- 纹理图像单元数(在顶点着色器和片段着色器中)
- 最大绘制缓冲区数
在编写我的GPU研究项目之前,我需要提前了解这些数字。
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
例如:
GLint result;
glGetIntegerv(GL_MAX_VARYING_FLOATS, &result);
不太确定您的项目旨在实现什么,但如果它是通用计算且您尚未意识到,您可能会对OpenCL感兴趣。特别是Cl/GL互操作性,如果还涉及到图形元素,并且您的硬件支持的话。
如Damon在评论中指出,在实践中,处理纹理尺寸可能比这更复杂。问题是由于某些纹理大小的渲染可能会从硬件回退到软件,以及因为使用的像素格式不同而导致纹理的大小也会有所变化。要解决此问题,可以使用GL_PROXY_TEXTURE_*和glTexImage*。