是否有可能获得特定于供应商的OpenGL ES 2.0方法列表?

时间:2014-10-28 12:41:16

标签: android opengl-es-2.0

小背景故事 - 我正在使用OpenGL ES2.0开发Android应用程序,前段时间我遇到线宽问题,最后证明glLineWidth()实现是供应商特定的,可能的范围价值不保证。例如,Adreno200为1-18,模拟器为1-100。

我想知道是否有可能获得此类方法的列表。

2 个答案:

答案 0 :(得分:1)

运行程序时,您可以从glGet获取所有此类数据。

例如,请求glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE,lineWidthRange);将返回行宽范围。

OpenGL ES 2.0 specification列出了6.2节中的所有最低要求。从那里我们可以看到线宽范围保证为[1,1],其他一切都是特定于实现的。

我不知道一个列表可以比较"所有"根据属性值实现。

答案 1 :(得分:1)

具有供应商特定值的限制列表位于规范文档中。要找到:

  1. 转到https://www.khronos.org/(Khronos是负责OpenGL ES标准的联盟)。
  2. 点击" OpenGL ES"在页面顶部窗格上方的选项卡中。
  3. 点击" Specs&集管和#34;在窗格的底部。这将带您进入https://www.khronos.org/registry/gles/
  4. 找到" OpenGL ES 2.0规范和文档"部分,然后单击"完整规范"。或者更好的是,下载PDF文件以方便将来使用。
  5. 在此PDF文件中,查找从第134页开始的部分" 6.2状态表"部分。您要查找的信息是"表6.18实现相关值&#34 34。

    此表列出了每个值的名称,以及用于查询特定实现的值的函数。同样非常有用,它列出了所有实现都支持的最小值。

    对于您的具体示例,您将找到值ALIASED_LINE_WIDTH_RANGE,它是表中的第6个条目,函数名称为GetFloatv,支持的最小值为1,1,这个描述:

      

    别名线宽的范围(低到高)

    基于此,您知道对于最大线宽,实现可以具有低至1的限制(即它们根本不支持宽线),并且您可以查询您正在使用的实现的限制:

    GLfloat widthRange[2];
    glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, widthRange);