Таинственно неверный контекст OpenGL в Electron
Я создал анимационный движок C++ и OpenGL, поддерживаемый GLX и GLEW, обернутый в модуль Node.js через SWIG. Цель состоит в том, чтобы использовать движок внутри приложения Electron в процессе браузера.
Двигатель выглядит довольно стабильно. Он поддерживает несколько контекстов, привязывает правильный контекст OpenGL перед всеми соответствующими операциями, проверяет ошибки практически после каждой возможной операции и поддерживается довольно большим набором тестов.
За пределами электронного приложения все работает просто отлично. Однако, как ни странно, простые скрипты, которые обычно работают вне Electron, не работают внутри приложения Electron в процессе браузера или рендерера.
симптомы
- Все, что сгенерировано
glGenX
возвращается 0 glGetString(GL_VERSION)
возвращает ноль, потомglGetError
не возвращает ошибки
факты
В этом порядке:
- Контекст OpenGL создается с
glXCreateContextAttribsARB
с разумным конфигом FB. Возвращаемое значение ненулевое. XSync(display, false)
вызывается, чтобы ждать X ошибок. Нет ошибок, вызывающих сбой программы, установка обработчика ошибок X не дает результатов.- Контекст обновляется с помощью
glXMakeCurrent
нет сообщений об ошибкахglGetError
, - Контекст прямой, проверяется с помощью
glXIsDirect
, - GLEW инициализируется с
glewInit
, возвращаясьGLEW_OK
, - Действия в этом случае происходят в одном потоке. В приложении Electron контекст создается и сразу используется в том же процессе; Создание контекста само запрашивает версию в том же методе. Те же симптомы до и после того, как приложение "Электрон" готово.
Я довольно озадачен этим. Все, что я проверяю, говорит о том, что контекст был создан правильно, но в противном случае он кажется поврежденным или неработоспособным.
В чем дело? Что еще я могу проверить?
1 ответ
https://github.com/electron/electron/issues/8848 точно сообщает о проблеме с нулевым GL_VERSION и обвиняет Electron версии 1.6.1. Обходной путь должен был откатиться до версии 1.4.15.