我有一个现有的OpenGL上下文,我想与新的QOpenGLWidget共享。
我知道我可以这样做:
但是,我想按照其他顺序进行:
这可能吗?
答案 0 :(得分:2)
编辑,我对QOpenGLFramebufferObject了解不多,所以忽略我以前的答案内容。
在QOpenGLWidget中,它总是将其上下文设置为与其最近的顶级窗口(或者如果它是一个窗口本身)共享。您的理解是正确的,没有办法更改QOpenGLWidget成员上下文而不将其子类化以完全改变它的工作方式。在QOpenGLWidgetPrivate :: initialize()函数中,上下文是从defaultFormat和顶级shareContext初始化的。如果要在创建QOpenGLWidget之前使用上下文,则必须通过全局共享上下文。 Qt :: AA_ShareOpenGLContexts需要在创建QGuiApplication对象之前设置。
在尝试访问全局上下文之前,您需要等到QGuiApplication初始化全局上下文。由于global_share_context是QOpenGLContext类的静态成员,因此您只需创建任何QOpenGLContext并通过context.globalShareContext()访问它。然后只需删除您的初始QOpenGLContext。您创建的任何QOpenGLWidget都将自动与该上下文共享。如果您可以在创建()特殊上下文之前找到一种获取指向全局共享上下文的指针的方法,那么您可以只与全局上下文共享,并且您可以随意进行共享。共享是通过彼此共享的整个共享上下文组,因此任何与一个上下文的共享与整个组共享。
此外,除了QOpenGLContext says it can共享帧缓冲区对象外,我不知道这是否会发生任何变化。