我最近正在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环境中的。