我目前正在通过 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及其自己的窗口渲染,是吗?
我的渲染实际上是在一个单独的上下文中实现的。在这种情况下,它如何导致闪烁?有什么想法吗?