Electron 中神秘无效的 OpenGL 上下文
Mysteriously invalid OpenGL context in Electron
我创建了一个由 GLX 和 GLEW 支持的 C++ 和 OpenGL 动画引擎,通过 SWIG 封装在 Node.js 模块中。目标是在浏览器进程中使用 Electron 应用程序内部的引擎。
引擎看起来很稳定。它是多上下文感知的,在所有相关操作之前绑定正确的 OpenGL 上下文,在几乎所有可能的操作之后检查错误,并由相当大的测试套件支持。
在 Electron 应用程序之外一切正常。然而,神秘的是,通常在 Electron 之外工作的简单脚本在浏览器或渲染器进程中的 Electron 应用程序中失败。
症状
glGenX
生成的任何内容都返回 0
glGetString(GL_VERSION)
returns 空,之后glGetError
returns 没有错误
事实
顺序为:
- OpenGL 上下文是使用
glXCreateContextAttribsARB
使用合理的 FB 配置创建的。返回值非零。
正在调用 XSync(display, false)
以等待 X 错误。没有错误导致程序崩溃,设置 X 错误处理程序不会产生任何结果。
- 上下文与
glXMakeCurrent
同步,glGetError
未报告任何错误。
- 上下文是直接的,用
glXIsDirect
检查过。
- GLEW 使用
glewInit
初始化,返回 GLEW_OK
。
- 本例中的操作发生在同一个线程中。在 Electron 应用程序中,创建上下文并立即在同一进程中使用;上下文的创建本身在同一方法中查询版本。 Electron 应用前后的相同症状是 'ready'.
我对此感到很困惑。我正在检查的所有内容 都显示 表明上下文已正确创建,但它似乎已损坏或功能失调。
这是怎么回事?我还能检查什么?
https://github.com/electron/electron/issues/8848 准确地报告了 null GL_VERSION 的问题并归咎于 Electron 版本 1.6.1。解决方法是回滚到版本 1.4.15。
我创建了一个由 GLX 和 GLEW 支持的 C++ 和 OpenGL 动画引擎,通过 SWIG 封装在 Node.js 模块中。目标是在浏览器进程中使用 Electron 应用程序内部的引擎。
引擎看起来很稳定。它是多上下文感知的,在所有相关操作之前绑定正确的 OpenGL 上下文,在几乎所有可能的操作之后检查错误,并由相当大的测试套件支持。
在 Electron 应用程序之外一切正常。然而,神秘的是,通常在 Electron 之外工作的简单脚本在浏览器或渲染器进程中的 Electron 应用程序中失败。
症状
glGenX
生成的任何内容都返回 0glGetString(GL_VERSION)
returns 空,之后glGetError
returns 没有错误
事实
顺序为:
- OpenGL 上下文是使用
glXCreateContextAttribsARB
使用合理的 FB 配置创建的。返回值非零。
正在调用 XSync(display, false)
以等待 X 错误。没有错误导致程序崩溃,设置 X 错误处理程序不会产生任何结果。- 上下文与
glXMakeCurrent
同步,glGetError
未报告任何错误。 - 上下文是直接的,用
glXIsDirect
检查过。 - GLEW 使用
glewInit
初始化,返回GLEW_OK
。 - 本例中的操作发生在同一个线程中。在 Electron 应用程序中,创建上下文并立即在同一进程中使用;上下文的创建本身在同一方法中查询版本。 Electron 应用前后的相同症状是 'ready'.
我对此感到很困惑。我正在检查的所有内容 都显示 表明上下文已正确创建,但它似乎已损坏或功能失调。
这是怎么回事?我还能检查什么?
https://github.com/electron/electron/issues/8848 准确地报告了 null GL_VERSION 的问题并归咎于 Electron 版本 1.6.1。解决方法是回滚到版本 1.4.15。