2017-08-12 27 views
2

我正在使用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中可見。

+0

你嘗試過'glFinish'而不是'glFlush'嗎? –

+0

是的,不會改變一件事,可悲的是 – Krustenkaese

+0

你的「正確」的框架0甚至不包含繪製三角形的代碼。 – derhass

回答

0

我解決了這個問題,當我比較狀態機狀態並看到Shader程序從0切換到1時。 在渲染函數的每個開始處將其更改回0,從而禁用陰影程序,導致預期的行爲。

相關問題