2011-02-15 59 views
4

我在想,如果有一个简单的方法来查询(编程)对下列功能的GPU OpenGL的限制:
- 最大的2D纹理大小
- 最大3D纹理大小
- 的最大数量顶点着色器属性
- 不同彩车的最大数量
- 纹理图像单位数(顶点着色器,并在片段着色器)
- 绘图缓冲的最大数量检查GPU的OpenGL限制

我之前需要预先知道这些数字writi我的GPU研究项目。

回答

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

例如为:

GLint result; 
glGetIntegerv(GL_MAX_VARYING_FLOATS, &result); 

不太清楚你的项目正着手来实现的,但如果它的通用计算和你不是已经意识到这一点,你可能会感兴趣的OpenCL。尤其是Cl/GL interop如果还有图形元素,并且您的硬件支持它。

正如Damon在实际评论中指出的那样,纹理尺寸可能比这更复杂。出现这些问题是因为对于某些尺寸的纹理,渲染可能会从硬件回退到软件,还会因为纹理的大小根据所使用的像素格式而变化。要解决此问题,可以使用GL_PROXY_TEXTURE_* with glTexImage*

+0

谢谢awoodland!我相信我还需要学习OpenCL。之前没有使用过,但那会很方便学习。 – 2011-02-15 16:33:10

1

为补充什么被“awoodland”说,如果你还是不知道......我想你应该看看GLEW ...

GLEW提供了确定有效的运行时间机制目标平台支持哪些OpenGL扩展。

http://glew.sourceforge.net/