Qt 6 QOpenGLWidget嵌套事件循环(模态对话框)渲染中断致纹理损坏
QOpenGLWidget模态对话框弹出时渲染画面损坏问题(Qt 6回归)
当QOpenGLWidget正在渲染复杂场景(如视频图形引擎)时,若打开模态对话框(QFileDialog、QMessageBox等),该控件会显示前一帧的损坏/点状/稀疏版本,而非完整帧或干净状态。这是Qt 5到Qt 6的回归问题,由Qt 6新的合成架构导致。
代码示例
class GLWidget : public QOpenGLWidget { void paintGL() override { // 多阶段繁重渲染 for (int i = 0; i < 6; i++) { glBindFramebuffer(GL_FRAMEBUFFER, m_fbos[i]); renderScene(i); } // 异步PBO回读 glBindBuffer(GL_PIXEL_PACK_BUFFER, m_pbo); glReadPixels(0, 0, 1920, 1080, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); // 渲染至默认帧缓冲 glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebufferObject()); renderFinalQuad(); update(); // 调度下一帧 } // 触发问题的操作:渲染时打开模态对话框,对话框弹出期间glWidget显示损坏 // QString file = QFileDialog::getOpenFileName(this, "Open", path, "*.dat"); };
现象对比图


内容的提问来源于stack exchange,提问作者sumit kang
相关产品推荐
相关产品推荐

