Emscripten:如何在运行时检测webgl上下文版本?

时间:2018-09-19 09:34:22

标签: webgl emscripten

我在Emscripten中使用GLFW3和GLEW包装器,因此我没有手动调用emscripten_webgl_create_context,也没有设置上下文的属性。上下文版本仅由JS代码确定,这超出了我的范围。在我的C ++代码中,我需要知道我们是在WebGL1还是WebGL2上下文中运行。有没有独立于文档的方法吗?像这样:

const auto ctx = emscripten_webgl_get_current_context();
emscripten_webgl_get_context_version(ctx);// Should return 1 or 2.

1 个答案:

答案 0 :(得分:1)

在C ++中

const char ES_VERSION_2_0[] = "OpenGL ES 2.0";
const char ES_VERSION_3_0[] = "OpenGL ES 3.0";

const char* version = glGetString(GL_VERSION);
if (strncmp(version, ES_VERSION_2_0, sizeof(ES_VERSION_2_0)) == 0) {
  // it's WebGL1
} else if (strncmp(version, ES_VERSION_3_0, sizeof(ES_VERSION_3_0)) == 0) {
  // it's WebGL2
} else {
  // it's something else
}

WebGL中的版本字符串具有必需的非硬件相关的起始格式。参见the spec for WebGL2

  

VERSION:返回WebGL 2.0 <供应商特定信息> 形式的版本或发行号。

WebGL1

  

VERSION:返回WebGL 1.0 <供应商特定信息>形式的版本或发行号。

Emscripten还返回固定的字符串。参见来源

https://github.com/kripken/emscripten/blob/ec764ace634f13bab5ae932912da53fe93ee1b69/src/library_gl.js#L923