小小的背景故事 - 我正在使用OpenGL ES2.0开发Android应用程序,前一段时间我遇到了线宽问题,最后发现glLineWidth()
实现是供应商特定的,并且不保证可能值的范围。例如对于Adreno200,它是1-18,仿真器是1-100。是否有可能获得供应商特定的OpenGL ES 2.0方法列表?
我想知道是否有可能获得这种方法的列表。
小小的背景故事 - 我正在使用OpenGL ES2.0开发Android应用程序,前一段时间我遇到了线宽问题,最后发现glLineWidth()
实现是供应商特定的,并且不保证可能值的范围。例如对于Adreno200,它是1-18,仿真器是1-100。是否有可能获得供应商特定的OpenGL ES 2.0方法列表?
我想知道是否有可能获得这种方法的列表。
运行程序时,您可以从glGet中获取所有这些数据。
例如,请求glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE,lineWidthRange);
将返回线宽范围。
OpenGL ES 2.0 specification在其第6.2节列出了所有最低要求。从那里我们可以看到线宽范围保证为[1,1],其他一切都是特定于实现的。
我不知道会根据属性值比较“所有”实现的列表。
具有供应商特定值的限制列表位于spec文档中。要发现:
在此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);