小编Lit*_*tty的帖子

Electron中神秘无效的OpenGL上下文

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

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

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

症状

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

事实

按此顺序:

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

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

这是怎么回事?我还能检查什么?

c++ opengl glx electron

12
推荐指数
1
解决办法
1101
查看次数

如何使用 THREE.ShaderLib 创建自定义着色器

我一直在努力学习THREEJS着色器材料。到目前为止我了解了uniforms、vertexShader和fragmentShader在glsl和webgl的世界中如何在顶点和片段的投影和着色方面发挥作用。我一直在尝试找到一些很好的例子,其中使用 THREE.ShaderLib 扩展了 THREEJS 的 ShaderMaterial。

假设我想扩展一个标准的 Threejs 材质(THREE.ShaderLib['standard'])来写入 envmap 纹理,这可能吗?或者我是否绝对有必要从头开始编写所有内容?

javascript webgl three.js webgl-extensions aframe

3
推荐指数
1
解决办法
2825
查看次数

如何确保销毁父实例成员?

在C++ 11中考虑这两个类:

class A
{
    ArbitraryClass someInstance;
};

class B : public A
{

};
Run Code Online (Sandbox Code Playgroud)

并考虑我这样使用B:

B *foo = new B;
delete foo;
Run Code Online (Sandbox Code Playgroud)

据我所知,隐式析构函数A不会在这里调用.

someInstance仍然在这种情况下被破坏,因为它变成"关联"的成员B?或者我是否需要声明虚拟析构函数A以自动触发成员的销毁?

c++ c++11

0
推荐指数
1
解决办法
82
查看次数

标签 统计

c++ ×2

aframe ×1

c++11 ×1

electron ×1

glx ×1

javascript ×1

opengl ×1

three.js ×1

webgl ×1

webgl-extensions ×1