QQuickFramebufferObject:自定义FBO在哪里使用?这怎么会导致闪烁?

时间:2017-08-22 15:24:53

标签: qtquick2 openscenegraph qtquickcontrols2

我目前正在通过 QQuickFramebufferObject 在QML中集成自定义OpenGL视口。我观察到整个应用程序窗口的一些闪烁(不仅仅是 QQuickFramebufferObject 窗口),我想知道为什么。

我的自定义 QQuickFramebufferObject :: Renderer 会创建一个单独的FPO:

QOpenGLFramebufferObject* OsgRenderer::createFramebufferObject(const QSize &size)
{
    QOpenGLFramebufferObjectFormat format;
    format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
    return new QOpenGLFramebufferObject(size, format);
}

所以我理解Qt定义了自己的FBO类型( QOpenGLFramebufferObject ),以便稍后可以使用FBO将其与自己的GL渲染混合,是吗?

然后我做了所有的渲染

void OsgRenderer::render()
{
    assert(m_osgItem);

    if ( !m_osgItem->getViewer() )
        return;

    // Without this line the model is not displayed in the second
    // and subsequent frames.
    QOpenGLContext::currentContext()->functions()->glUseProgram(0);

    // Ask OSG to render.
    m_osgItem->getViewer()->frame(); // WARNING: non-blocking (executed in a thread of its own - in a thread-safe way).

    // Reset OpenGl state for QtQuick.
    m_osgItem->window()->resetOpenGLState();
}

我希望QtQuick在调用render()之后实际收集我自定义渲染的FBO及其自己的窗口渲染,是吗?

我的渲染实际上是在一个单独的上下文中实现的。在这种情况下,它如何导致闪烁?有什么想法吗?

0 个答案:

没有答案