我创建了一个由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检查。
  • GLEW使用glewInit初始化,返回GLEW_OK
  • 在这种情况下, Action 在同一线程内发生。在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/

    10-11 22:40
    查看更多