如何检测opengl是否在Desktop或ES上运行
How to detect is opengl ruunning on Desktop or ES
我正在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_VERSION
和GL_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
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- SDL + OpenGL ES 2.0 使用着色器显示纹理
- 为什么OpenGL ES 3.1+上GL_DEPTH_COMPONENT的glCheckFramebufferStatu
- 计算着色器Open GL ES的多个输入
- Open GL ES 3.1 的计算着色器的最小工作示例
- OpenGL ES 绘制形状
- 如何使用着色器在 opengl es 中渲染四边形内部的部分纹理
- 错误:不支持 GLSL 3.30.支持的版本包括:1.10、1.20、1.30、1.00 ES、3.00 ES、3.10
- OpenGL ES:在顶点着色器中计算顶点位置时性能不佳
- C++ GLSL 着色器:"error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES,
- OpenGL (ES) 图像处理C++
- E/libEGL:调用没有当前上下文的 OpenGL ES API (每个线程记录一次) - Android/SDL
- AcquireNextFrame 不起作用(Desktop Replication API & D3D11)
- 使用GlblitFrameBuffer进行多样采样,无法使用OpenGL ES 3.0
- 在使用PI上的OpenGL ES绘制之前,如何旋转纹理
- 使用Emscripten将OpenGL ES转换回主机
- Opensl Es-eSunipuling Audio缓冲区队列
- OpenGL ES ANDROID C++ ERROR
- 为 Qt5 指定 OpenGL Desktop 而不是 ES
- 如何检测opengl是否在Desktop或ES上运行