我正在使用QQuickFramebufferObject对象呈现红色三角形到帧缓冲区,它本身被绘制到QML场景。
为此,我重写了关联的QQuickFramebufferObject :: Renderer类的渲染函数。
这使功能看起来像以下:QQuickFramebufferObject重绘只显示清除颜色
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();
}
}
我执政经验的问题是,第一帧被正确绘制,而所有其它帧只显示色彩分明。 我已经分析了福格尔OpenGL的API调用,并张贴结果在引擎收录:
帧0(正确的帧):https://pastebin.com/aWu4ee6m
帧1:https://pastebin.com/4EmWmnMv
唯一的区别,我注意到了初始化电话, Qt在哪里查询状态机状态,所以我很好奇我还做错了什么。
感谢您的帮助。
小更新:
如果我删除glClear(...)的帧显示正确的图像,但我怀疑这是正确的行为。
当我使用glClear时,framebuffer绑定是为我创建的一个Qt使用。它与标志GL_FRAMEBUFFER绑定,这也使绘图。
我从函数返回后,默认的framebuffer(0)被绑定和清除。这个过程可以很好地在框架1中看到。
我一直在想的是glBlitFrameBuffer是否被调用。 Vogl似乎没有接到这个电话,也是在Vogl提供的各个帧缓冲区的预览中,我看不到Frame1中我的红色三角形,而它在Frame0中可见。
你尝试过'glFinish'而不是'glFlush'吗? –
是的,不会改变一件事,可悲的是 – Krustenkaese
你的“正确”的框架0甚至不包含绘制三角形的代码。 – derhass