如何检测opengl是否在Desktop或ES上运行

How to detect is opengl ruunning on Desktop or ES

本文关键字:Desktop ES 运行 是否 opengl 何检测 检测      更新时间:2023-10-16

我正在C++和OpenGL上编写跨平台库。我想知道如何检测我是否在OpenGL Desktop或ES上运行?

也许用glGetString(GL_SHADING_LANGUAGE_VERSION)播种?

解析版本字符串来告诉任何关于OpenGL实现的信息一直是禁忌。它们仅适用于人眼,否则将有一套更严格的规则来管理字符串的格式,并在报告版本号之前提供合规性保证。


也就是说,GLES规范在这方面比GL更严格,因此有可能:

OpenGL ES 2.0规范-6.1.5字符串查询-第128页

GL_VERSION字符串的布局如下:

"OpenGL ES N.M供应商特定信息">

在OpenGL中,兼容的实现将以这种方式格式化其GL_VERSION字符串:

OpenGL 4.4核心规范-22.2字符串查询-第488页

GL_VERSIONGL_SHADING_LANGUAGE_VERSION字符串的布局如下:

<version number><space><vendor-specific information>

[…]

版本号的格式可以是主要编号.次要编号主编号.次要号码.释放编号

这意味着,在兼容的OpenGL ES实现中,版本字符串将以OpenGL ES开头,与OpenGL中一样,它将以数字开头(尽管我不认为"数字"仅限于字符[0-9],因为使用的语言很模糊)。理论上,你可以用这些信息来区分两者。

但是,您不应该因为实现报告了某个版本号而推断它实际上实现了符合性所需的功能集——这在OpenGL 2.0时代是一个巨大的问题。

内部着色器:
根据http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf(第12页)应该有GL_ES定义。如果它是0,或者不存在-您使用dektop实现,否则-ES.

在其他地方:
此处定义的GL_ES_VERSION_2_0http://www.khronos.org/registry/gles/api/GLES2/gl2.h.所以,如果它定义了——我们在ES系统上
Wikibooks也推荐它:http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_03