我需要在应用程序中的所有 OpenGL 小部件之间共享数据(纹理、顶点缓冲区等)。
以下代码不起作用:
我发现了一些解决方案,其中一个主要目标是QGLWidget
和其他的都是使用这个主要的小部件构建的。不幸的是,我不能使用这种方法,因为我所有的 QGLWidget 都是相等的,并且几乎可以肯定第一个(主要)创建的 QGLWidget 将在其他 QGLWidget 之前被销毁。
可能的方法:
另一种方法:
- 主 OpenGL 上下文并为每个 QGLWidget 创建子上下文
- 不工作:
context->isSharing()
回报false
-
我用于创建上下文的代码,context1
and context2
随后传递给 QGLWidgets 的构造函数:
QGLContext *mainContext = new QGLContext(format), *context1, *context2;
mainContext->create();
context1 = new QGLContext(format);
context1->create(mainContext);
context2 = new QGLContext(format);
context2->create(mainContext);
cout << mainContext->isSharing() << " " << context1->isSharing() << endl;
对于第一种方法,您不是设置共享,而是尝试强制不同的 QGLWidgets 使用相同的上下文。正如上面指出的,这是错误的,也是行不通的。
相反,正常创建 QGLWidget,并在创建其他 QGLWidget 时在 shareWidget 参数中传递第一个 QGLWidget。这样,您将为每个 QGLWidget 获得一个单独的上下文,但它们都将与第一个 QGLWidget 的上下文共享(从而彼此共享)。看http://qt-project.org/doc/qt-4.8/qglwidget.html#QGLWidget http://qt-project.org/doc/qt-4.8/qglwidget.html#QGLWidget
在其他小部件之前销毁第一个小部件应该不是问题,因为共享对象将一直存在,直到任何共享上下文处于活动状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)