我有一个现有的 OpenGL 上下文,我想与新的 QOpenGLWidget 共享。
我知道我可以这样做:
- 创建QOpenGLWidget
- 等待直到initializeGL被调用并保存上下文
- 创建新的 QOpenGLContext,并使其与保存的上下文共享
但是,我想以其他顺序执行此操作:
- 创建QOpenGLContext
- 创建 QOpenGLWidget,提供现有上下文并使它们共享
这可能吗?
编辑,我对 QOpenGLFramebufferObject 还不太了解,所以忽略我之前的回答内容。
在 QOpenGLWidget 中,它始终将其上下文设置为与其最接近的顶级窗口(或自身,如果它是一个窗口)共享。您的理解是正确的,如果不对其进行子类化以完全改变其工作方式,则无法更改 QOpenGLWidget 成员上下文。在 QOpenGLWidgetPrivate::initialize() 函数中,上下文是从 defaultFormat 和顶层 shareContext 初始化的。如果您想在创建 QOpenGLWidget 之前使用上下文,那么它必须通过全局共享上下文。 Qt::AA_ShareOpenGLContexts 需要在创建 QGuiApplication 对象之前设置。
您需要等到 QGuiApplication 初始化全局上下文才能尝试访问它。由于 global_share_context 是 QOpenGLContext 类的静态成员,因此您可以创建任何 QOpenGLContext 并通过 context.globalShareContext() 访问它。然后删除你最初的QOpenGLContext。您创建的任何 QOpenGLWidget 将自动与该上下文共享。如果您可以在 create() 特殊上下文之前找到一种获取指向全局共享上下文的指针的方法,那么您可以只与全局上下文共享,并且您可以很好地进行,因为共享是双向的。共享是通过彼此共享的整组共享上下文进行的,因此任何一个上下文的共享都会与整个组共享。
另外,我不知道这是否会改变什么,除了QOpenGLContext 说可以 http://doc.qt.io/qt-5/qopenglcontext.html#context-resource-sharing也共享帧缓冲区对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)