Electron中神秘无效的OpenGL上下文

时间:2017-06-13 03:46:01

标签: c++ opengl electron glx

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

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

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

症状

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

事实

按此顺序:

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

我对此非常困惑。我正在检查的所有内容以表明上下文已正确创建,但它看起来已损坏或功能失调。

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

1 个答案:

答案 0 :(得分:2)

https://github.com/electron/electron/issues/8848完全报告了无效GL_VERSION的问题,并指责电子版1.6.1。解决方法是回滚到版本1.4.15。