#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
перед компиляцией.