【问题标题】:Mysteriously invalid OpenGL context in ElectronElectron中神秘无效的OpenGL上下文
【发布时间】:2017-06-13 03:46:00
【问题描述】:

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

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

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

症状

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

事实

按此顺序:

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

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

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

【问题讨论】:

  • Node.js 总是多线程的,你是异步调用 C++ 吗?
  • 更准确地说,我所有的 C++ 调用都是同步的。上下文的创建和版本查询发生在同一个 C++ 方法中;除非 Node.js 正在执行一些我不知道的魔法(并且仅在 Electron 中?),否则这些操作肯定应该发生在同一个线程上。
  • 您创建了多少个 GL 上下文?
  • @Luca 在这种情况下只有一个,但引擎可以安全地处理多个上下文。
  • 你能提供一些代码吗?

标签: c++ opengl electron glx


【解决方案1】:

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

【讨论】:

  • 嘘。那肯定会解释它,感谢您的研究。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
相关资源
最近更新 更多