1

这个问题很难解释,我想不出一个词来解释这个现象,所以我给你看一张图。

在此处输入图像描述

最左边是实际的dockwidget,所有重叠的地方是一个openGL 小部件,它应该是绘制蓝色和一棵树。但事实并非如此。

这个问题甚至叫什么,我该如何解决?

我还应该补充一点,当不涉及任何码头小部件时,它可以完美运行。

编辑:新信息,在openGL分析器中分析应用程序后,我发现当使用停靠小部件时,由于某种原因从不调用CGLUpdateContext,并且每一次gl调用都会导致错误GL_INVALID_FRAMEBUFFER_OPERATIONI还发现invalid drawable控制台中出现错误.

进一步的研究表明这可能是 Qt 中的错误。我会更多地研究它。

EDIT2:我在初始化 openGL 并调用 glClear 之前进行了此检查,这是引发第一个错误的地方。

GLenum er = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(er != GL_FRAMEBUFFER_COMPLETE) {
    abort();
}

当使用停靠小部件时,此时会中止,告诉我们帧缓冲区不完整。但是,如果我删除停靠小部件,这不会中止并且应用程序运行正常。我现在知道帧缓冲区是不完整的,但为什么呢?这是 Qt 的问题,而不是我的代码。

4

0 回答 0