【问题标题】:Check GPU OpenGL Limits检查 GPU OpenGL 限制
【发布时间】:2011-06-27 14:10:54
【问题描述】:

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

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

【问题讨论】:

    标签: opengl gpu


    【解决方案1】:

    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 在实践中在 cmets 中指出的那样,纹理尺寸可能比这更复杂。出现这些问题的原因是,对于某些大小的纹理,渲染可能会从硬件回退到软件,并且还因为纹理的大小取决于所使用的像素格式。要解决此问题,可以使用GL_PROXY_TEXTURE_* with glTexImage*

    【讨论】:

    • 感谢林地!我相信我还需要学习 OpenCL。以前没用过,但是学习一下会很方便。
    • 请注意,虽然 GL_MAX_TEXTURE_SIZE 返回的尺寸通常会起作用,但它们只是提示,并不保证适用于每种像素格式。根据 OpenGL FAQ (21.130),实现报告大于硬件可以处理的大小是完全合法的,只要它能够以某种方式使其正常工作(在软件中)。因此,为了 100% 安全,他们建议使用 glTexImage2D 和 GL_PROXY_TEXTURE_2D。
    • @Damon - 好点,我的回答只是介绍 glGet (因为这似乎是 OP 正在寻找的知识)。我将更新我的答案,使其更适用于纹理。
    【解决方案2】:

    作为对“awoodland”所说内容的补充,如果您仍然不知道...我认为您应该看看 GLEW...

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

    http://glew.sourceforge.net/

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 2022-01-27
      • 2014-06-05
      • 1970-01-01
      • 2011-06-25
      • 2013-03-25
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      相关资源
      最近更新 更多