2014-10-28 100 views
0

小小的背景故事 - 我正在使用OpenGL ES2.0开发Android应用程序,前一段时间我遇到了线宽问题,最后发现glLineWidth()实现是供应商特定的,并且不保证可能值的范围。例如对于Adreno200,它是1-18,仿真器是1-100。是否有可能获得供应商特定的OpenGL ES 2.0方法列表?

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

回答

1

运行程序时,您可以从glGet中获取所有这些数据。

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

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

我不知道会根据属性值比较“所有”实现的列表。

1

具有供应商特定值的限制列表位于spec文档中。要发现:

  1. 转到https://www.khronos.org/(Khronos是负责OpenGL ES标准的财团)。
  2. 在页面顶部窗格上方的选项卡中单击“OpenGL ES”。
  3. 单击窗格底部的“规格&标题”。这会带你到https://www.khronos.org/registry/gles/
  4. 查找“OpenGL ES 2.0规范和文档”一节,然后单击“完整规范”。或者更好的是,下载PDF文件以备将来使用。

在此PDF文件中,查找从第134页开始的“6.2状态表”一节。然后,您要查找的信息在“表6.18实现相关值”中。

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

为了您的具体的例子,你会发现一个值ALIASED_LINE_WIDTH_RANGE,这是在表中所支持的最低值第6项,与GetFloatv函数名,1,1,这对于说明:

范围(从低到高)锯齿线的宽度

在此基础上,你知道的实现可以有低至1的最大线宽度的限制(即它们不支持宽行的话),你可以查询你正在使用w的实现的限制ith:

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