我正在使用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