c++ - Electron中神秘无效的OpenGL上下文

标签 c++ opengl electron glx

我创建了一个由 GLX 和 GLEW 支持的 C++ 和 OpenGL 动画引擎,通过 SWIG 封装在一个 Node.js 模块中。目标是在浏览器进程中使用 Electron 应用程序中的引擎。

引擎看起来相当稳定。它支持多上下文,在所有相关操作之前绑定(bind)正确的 OpenGL 上下文,在几乎所有可能的操作之后检查错误,并由相当大的测试套件提供支持。

在 Electron 应用程序之外,一切正常。然而,神秘的是,通常在 Electron 之外运行的简单脚本在浏览器或渲染器进程中的 Electron 应用程序中都失败了。

症状

  • glGenX 生成的任何东西都返回 0
  • glGetString(GL_VERSION) 返回null,之后glGetError 不返回错误

事实

按此顺序:

  • OpenGL 上下文是使用 glXCreateContextAttribsARB 和合理的 FB 配置创建的。返回值非零。
  • XSync(display, false) 被调用以等待 X 错误。没有错误导致程序崩溃,设置 X 错误处理程序不会产生任何结果。
  • 使用 glXMakeCurrent 将上下文设为当前,glGetError 没有报告错误。
  • 上下文是直接的,用 glXIsDirect 检查。
  • glewInit 初始化 GLEW,返回 GLEW_OK
  • 本例中的操作发生在同一个线程中。在 Electron 应用程序中,上下文被创建并立即在同一过程中使用;上下文的创建本身在同一方法中查询版本。 Electron 应用“就绪”前后的相同症状。

我对此感到很困惑。我正在检查的所有内容似乎表明上下文创建正确,但在其他方面显示已损坏或功能失调。

发生了什么事?我还能检查什么?

最佳答案

https://github.com/electron/electron/issues/8848准确地报告了空 GL_VERSION 的问题并归咎于 Electron 版本 1.6.1。解决方法是回滚到版本 1.4.15。

关于c++ - Electron中神秘无效的OpenGL上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44512019/

相关文章:

mysql - Electron 和 Node.js MySQL 如何在错误之前编写 console.log?

node.js - Electron - 独立 Node js 服务器

c++ - C++ 11 中 Mersenne Twister 的最佳常量种子

c++ - 从函数返回可变长度数组

c++ - 如何打印MAC地址

opengl - 如何为带有附加纹理的帧缓冲区编写直通顶点和片段着色器?

c++ - 帧缓冲区深度伪影

npm - Electron Builder 无法将下载的移动到最终位置(另一个下载速度更快的进程?)错误=重命名

c++ - 将 SpriteBatch 与 Direct3D 和 XAML 结合使用

c++ - 如何用freeglut绘制菱形?