Qt:QOpenGLContexts与不同的小部件“混合”

时间:2018-07-30 05:38:59

标签: qt opengl

我最近正在Qt窗口中使用本机openGL流数据构建Qt应用程序。

我有2个从QOpenGLWidget继承的小部件,一个有父级,另一个没有父级。它们都可以单独很好地工作(每次只显示(一个)小部件)。但是,当我尝试同时渲染它们时,我通过glBindTexture()绑定的纹理之一显示在错误的窗口中。就像他们使用相同的context()一样。但是通过继承QOpenGLWidget,它们应该具有两个不同的上下文。

在我的代码中,我像往常一样重写了initializeGL,paintGL和resizeGL

void initializeGL(){
    initializeOpenGLFunctions();
    // generate buffer, allocation, shaders...
}
void paintGL(){
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    // bind vao, bind texture, drawElements...
}

基本上,我的第二个窗口(window2)是一个“视频播放器”,用于播放内存中的图像序列。但是它出现在窗口1上。我还通过以下方式设置了QSurfaceFormat:

QSurfaceFormat format;
format.setRenderableType(QSurfaceFormat::OpenGL);
format.setVersion(3,3);
format.setProfile(QSurfaceFormat::CoreProfile);
setFormat(format);

在构造函数中。 有人可以告诉我这里可能出什么问题吗?我认为两个窗口使用的context()是不同的,那么我如何在window2中使用glBindTexture来申请window1?如果您发现这些信息还不够,请告诉我,谢谢。

平台:Ubuntu16.04,Qt5.6.2,OpenGL3.3

更新:

我对这篇文章有相同的问题:OpenGL multiple window rendering。但是,从理论上讲,我的是在Qt5环境中的。

0 个答案:

没有答案