检查GPU的OpenGL限制

4

我想知道有没有一种简单的方法(通过编程)查询GPU OpenGL以下功能的限制:
- 最大2D纹理大小
- 最大3D纹理大小
- 最大顶点着色器属性数
- 最大浮点数数量
- 纹理图像单元数(在顶点着色器和片段着色器中)
- 最大绘制缓冲区数

在编写我的GPU研究项目之前,我需要提前了解这些数字。

2个回答

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互操作性,如果还涉及到图形元素,并且您的硬件支持的话。

如Damon在评论中指出,在实践中,处理纹理尺寸可能比这更复杂。问题是由于某些纹理大小的渲染可能会从硬件回退到软件,以及因为使用的像素格式不同而导致纹理的大小也会有所变化。要解决此问题,可以使用GL_PROXY_TEXTURE_*和glTexImage*


谢谢awoodland!我相信我还需要学习OpenCL。以前没有使用过,但学习它会很方便。 - all_by_grace
请注意,GL_MAX_TEXTURE_SIZE返回的尺寸通常可用,但它们仅是提示,并不能保证适用于每种像素格式。根据OpenGL FAQ(21.130),只要实现可以以某种方式正确地处理它(在软件中),就可以报告大于硬件处理能力的尺寸,这是完全合法的。因此,为了百分之百的安全,请使用GL_PROXY_TEXTURE_2D和glTexImage2D。 - Damon
@Damon - 说得好,我的回答只是介绍了glGet(因为这似乎是OP正在寻找的知识)。我会更新我的答案,使其更适用于纹理。 - Flexo

1
作为对“awoodland”所说的内容的补充,如果你还不知道...我认为你应该看一下GLEW...
GLEW提供了有效的运行时机制,用于确定目标平台支持哪些OpenGL扩展。

http://glew.sourceforge.net/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接