QWidget QWidget::createWindowContainer(QWindow);
我们以前只使用外部的Qt OpenGL库来进行渲染。
我们希望从使用QWindow切换到某种QWidget,以便与触摸手势兼容,并且更好地与我们应用程序的其他部分兼容。最新推荐的OpenGL兼容QWidget似乎是QOpenGLWidget,因此我们正在尝试使用它。
glContext
是我们自己管理的OpenGLContext。
现在的问题是QOpenGLWidget不是一个QSurface,所以我无法调用
glContext->makeCurrent(this);
我希望能像之前在自定义QWindow和自己的OpenGLContext中那样使我的自定义QOpenGLWidget上下文变得当前。
如果我尝试使用QOpenGLWidget::makeCurrent();
,那么这将使用错误的上下文,并尝试使用一些神奇的QT处理的上下文或其他我不理解的东西。
结果是,在创建OpenGLContext后,当我们尝试调用
glFunctions = glContext->versionFunctions<QOpenGLFunctions_3_3_Core>();
if(!glFunctions->initializeOpenGLFunctions())
printf("Could not initialize OpenGL functions.");
OpenGL函数初始化总是失败。
我已经阅读了所有其他相关的资源,发现这个老的Stack Overflow问题比较类似:QOpenGLWidget with shared OpenGL context?
那个问题的答案没有解决我的问题,因为我们使用的是QApplication,而不是基于QWidget的QGuiApplication。
QGuiApplicationPrivate::init()
从未被调用,而QOpenGLContext::globalShareContext()
返回一个空指针,因为它没有被初始化。
不幸的是,我不能等待QOpenGLWidget::initializeGL()
被调用来初始化QT管理的OpenGLContext
,因为我们已经在各种类上有大量的OpenGL资源尝试在此之前进行初始化。
是否有其他人遇到过同样的问题?
有什么建议吗?