我在C ++和OpenGL上编写跨平台库。 我想知道如何检测我是在OpenGL桌面上运行还是ES?
也许用glGetString(GL_SHADING_LANGUAGE_VERSION)播出?
答案 0 :(得分:2)
解析版本字符串以告诉任何有关OpenGL实现的内容一直是禁忌。它们仅用于人类眼睛,否则将会有更严格的规则来管理字符串在报告版本号之前必须如何格式化和合规性保证。
也就是说,GLES规范在这个问题上比GL更严格,所以它可能是:
GL_VERSION
字符串的布局如下:" OpenGL ES N.M供应商特定信息"
在OpenGL中,兼容的实现将以这种方式格式化其GL_VERSION
字符串:
GL_VERSION
和GL_SHADING_LANGUAGE_VERSION
字符串的布局如下:
<version number><space><vendor-specific information>
[...]
版本号的格式为 major number.minor number 或 major number.minor number.release number ,其中的数字都有一位或多位数字。
这意味着在兼容的OpenGL ES实现中,版本字符串将以OpenGL ES
开头,而在OpenGL中它将以数字开头(尽管我不会假设&#34;数字&#34;在给定模糊语言的情况下,仅限于字符[0-9]。理论上,您可以使用此信息来区分这两者。
但是你不应该推断,因为一个实现报告了某个版本号,它实际上实现了合规性所需的功能集 - 这是一个 巨大的 问题。几天的OpenGL 2.0。
答案 1 :(得分:2)
内部着色器:
根据{{3}}(第12页),应该有 GL_ES 定义。如果它是0或缺席 - 你使用dektop实现,否则 - ES。
在其他地方:
此处http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf定义了 GL_ES_VERSION_2_0 。因此,如果它定义 - 我们在ES系统上
Wikibooks也推荐它:
http://www.khronos.org/registry/gles/api/GLES2/gl2.h