我创建了一个由GLX和GLEW支持的C++和OpenGL动画引擎,并通过SWIG封装在Node.js模块中。目标是在浏览器过程中使用Electron应用程序内的引擎。
引擎看起来很稳定。它具有多上下文意识,可以在所有相关操作之前绑定(bind)正确的OpenGL上下文,在几乎所有可能的操作之后检查错误,并由相当大的测试套件提供支持。
在 Electron 应用程序之外,一切正常。然而,一个神秘的问题是,通常在Electron之外可以使用的简单脚本在浏览器或渲染器过程中的Electron应用程序内部均失败。
症状
glGenX
生成的任何内容都将返回0 glGetString(GL_VERSION)
返回null,之后glGetError
不返回错误事实
按此顺序:
glXCreateContextAttribsARB
和合理的FB配置创建的。返回的值不为零。 XSync(display, false)
被调用以等待X错误。没有错误导致程序崩溃,设置X错误处理程序不会产生任何结果。 glXMakeCurrent
使上下文成为当前上下文,glGetError
没有报告任何错误。 glXIsDirect
检查。 glewInit
初始化,返回GLEW_OK
。 我对此感到困惑。我正在检查的所有内容似乎都表明上下文已正确创建,但否则它似乎已损坏或功能异常。
这是怎么回事?我还能检查什么?
最佳答案
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/