我有一个现有的OpenGL上下文,我想与一个新的QOpenGLWidget共享。
我知道我可以这样做:
但是,我想按其他顺序进行:
这可能吗?
编辑,我对QOpenGLFramebufferObject的了解不多,所以请忽略我以前的答案内容。
在QOpenGLWidget中,它始终将其上下文设置为与其最接近的顶级窗口(如果是窗口,则与其自身)共享。您的理解是正确的,如果不将其子类化以完全改变其工作方式,就无法更改QOpenGLWidget成员上下文。在QOpenGLWidgetPrivate :: initialize()函数中,上下文是从defaultFormat和顶级shareContext初始化的。如果要在创建QOpenGLWidget之前使用上下文,则必须通过全局共享上下文。在创建QGuiApplication对象之前,需要设置Qt :: AA_ShareOpenGLContexts。
您需要等待QGuiApplication初始化全局上下文,然后才能尝试访问它。由于global_share_context是QOpenGLContext类的静态成员,因此您可以创建任何QOpenGLContext并通过context.globalShareContext()访问它。然后只需删除您的初始QOpenGLContext。您创建的任何QOpenGLWidget将自动与该上下文共享。如果在create()特殊上下文之前可以找到指向全局共享上下文的指针的方法,则可以与全局上下文共享,并且共享是双向的。共享是通过彼此共享的整个共享上下文组进行的,因此与一个上下文进行的任何共享都与整个组共享。
另外,我不知道这是否会改变,但是QOpenGLContext表示它也可以共享帧缓冲区对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句