Emscripten: как определить версию контекста webgl во время выполнения? - PullRequest
0 голосов
/ 19 сентября 2018

Я использую обертки GLFW3 и GLEW в Emscripten, поэтому я не вызываю 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 голосов
/ 19 сентября 2018

В 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 имеют обязательный не аппаратно-зависимый начальный формат.См. спецификацию для WebGL2

ВЕРСИЯ: Возвращает номер версии или выпуска в форме WebGL 2.0 .

и для WebGL1

ВЕРСИЯ: Возвращает номер версии или выпуска в форме WebGL 1.0 .

Emscripten также возвращает фиксированные строки.См. Источник

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

...