При запросе WebGL2 любой браузер выдает мне контекст WebGL1 (emscripten)

#c #webassembly #emscripten

#c #веб-сборка #эмскриптен #c #webassembly #emscripten

Вопрос:

Я пытаюсь получить контекст WebGL 2.0. Я использую -s USE_WEBGL2=1 -s MIN_WEBGL_VERSION=2 и пробовал добавлять -s FULL_ES3=1 . Компиляция не дает ни предупреждений, ни ошибок. Я использую GLES3/ headers.

Кроме того:

 EmscriptenWebGLContextAttributes atrs;
emscripten_webgl_init_context_attributes(amp;atrs);
atrs.alpha = true;
atrs.depth = true;
atrs.stencil = false;
atrs.majorVersion = 2;
atrs.minorVersion = 0;

emctx = emscripten_webgl_create_context(id, amp;atrs);
emscripten_webgl_make_context_current(emctx);
std::cout << "GL_VERSION=" << glGetString(GL_VERSION) << std::endl;
  

Результат в консоли Chrome:

 OpenGL ES 2.0 (WebGL 1.0 (OpenGL ES 2.0 Chromium))
  

И очень похожий результат в Firefox.

Я уже около недели ищу, как сделать это правильно.

Ответ №1:

Итак, наконец, я все перепробовал и нашел решение. Моя проблема заключалась в том, что я компилировал с помощью makefile, и мой .cpp превратился в .o файлы со всеми соответствующими флагами, но на этапе компоновщика вам также необходимо указать эти флаги, иначе WebGL2.0 будет недоступен.

Ответ №2:

Это немного похоже на [0], попробуйте добавить -lGL к своим ссылочным флагам.

[0] https://github.com/emscripten-core/emscripten/issues/12118

Комментарии:

1. Это не имело значения. Значение -s STRICT -s MAX_WEBGL_VERSION=2 также не было. Я на Ubuntu с графическим драйвером по умолчанию (для NVidia на ноутбуке). Может ли это быть просто проблемой конфигурации системы? Но в JavaScript я получаю «webgl2» без каких-либо проблем.

Ответ №3:

Я только что столкнулся с такой проблемой. Может быть, вам нужно отредактировать library_browser.js в Emscripten, чтобы предоставить вам контекст «webgl2», а не «2d»?

Он записывается getContext('2d') при компиляции и должен быть отредактирован в getContext('webgl2',yourSettings) in library_browser.js перед компиляцией.