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