Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QQuickFramebufferObject重画仅显示清晰颜色_C++_Qt_Opengl_Qml - Fatal编程技术网

C++ QQuickFramebufferObject重画仅显示清晰颜色

C++ QQuickFramebufferObject重画仅显示清晰颜色,c++,qt,opengl,qml,C++,Qt,Opengl,Qml,我正在使用QQuickFramebufferObject对象将红色三角形渲染到帧缓冲区,帧缓冲区本身将被绘制到QML场景。 为此,我重写了关联的QQuickFramebufferObject::Renderer类的render函数。 此渲染函数如下所示: void GLRenderEngine::render() { glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STEN

我正在使用QQuickFramebufferObject对象将红色三角形渲染到帧缓冲区,帧缓冲区本身将被绘制到QML场景。
为此,我重写了关联的QQuickFramebufferObject::Renderer类的render函数。
此渲染函数如下所示:

void GLRenderEngine::render()
{
    glClearColor(0,0,0,1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

    glColor3d(1,0,0);
    glBegin(GL_TRIANGLES);
        glVertex2d(0,0);
        glVertex2d(1,0);
        glVertex2d(0,1);
    glEnd();

    glFlush();

    //QQuickWindow context of encapsuling QQuickFramebufferObject
    //is set in overwritten synchronize call
    if(m_pWindow)
    {
        m_pWindow->resetOpenGLState();
        update();
    }
}
我遇到的问题是,第一帧绘制正确,而所有其他帧只显示清晰的颜色。 我已经用vogl分析了opengl api调用,并在pastebin中发布了结果:

第0帧(正确的帧):

框架1:

我注意到的唯一区别是初始化调用,其中Qt查询状态机状态,因此我很好奇我还做错了什么。
提前谢谢你的帮助

小更新:

如果我删除glClear(…),框架将显示正确的图像,尽管我怀疑这是正确的行为

使用glClear时绑定的帧缓冲区是为我创建的要使用的帧缓冲区。它与标志GL_FRAMEBUFFER绑定,该标志还启用绘图

从函数返回后,将绑定并清除默认帧缓冲区(0)。在第1帧中可以很好地看到这个过程


我一直想知道是否正在调用glBlitFrameBuffer。Vogl似乎没有捕捉到这个调用,在Vogl提供的各个帧缓冲区的预览中,我在Frame1中看不到我的红色三角形,而在Frame0中它是可见的。

当我比较statemachines状态并看到着色器程序从0切换到1时,我解决了这个问题。
将其更改回0,从而在渲染函数的每次启动时禁用着色器程序,会产生预期的行为。

是否尝试了
glFinish
而不是
glFlush
?是的,不会改变任何事情,sadly您的“正确”帧0甚至不包含绘制三角形的代码。它是从第1439行开始的。我使用meld(一种非常有用的工具)比较了这两个帧