2017-08-12 3 views
2

QQuickFramebufferObjectオブジェクトを使用して、赤色の三角形をフレームバッファにレンダリングします。フレームバッファー自体はQMLシーンに描画されます。
これを行うには、関連するQQuickFramebufferObject :: Rendererクラスのrender関数を上書きしました。
このレンダリング機能には、以下のようになります。私はexperenceQQuickFramebufferObjectは、クリアカラーのみを表示します

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を解析してきた がvoglで呼び出し、ペーストビンに結果を掲載:

Frame0(正しいフレーム):https://pastebin.com/aWu4ee6m

FRAME1:私が気づいhttps://pastebin.com/4EmWmnMv

唯一の違いは、初期化の呼び出しでした、ここでQtはステートマシン状態をquerysするので、私は何が間違っていたのか不思議です。
事前にお世話になりました。

小更新:

私は、これは正しい動作です疑うもののフレームは、正しい画像を表示するにglClear(...)を削除した場合。

私がglClearを使用するときにバインドされるフレームバッファは、使用するために作成されたQtです。フラグGL_FRAMEBUFFERにバインドされており、描画も可能です。

関数から返された後、デフォルトのフレームバッファ(0)がバインドされ、クリアされます。この手順は、フレーム1でよく見られます。

glBlitFrameBufferが呼び出されているかどうかは私が不思議に思っていたことです。 Voglは、Voglによって提供された個々のフレームバッファのプレビューでも、その呼び出しをキャッチしているようには見えません.Frame0に表示されている間、Frame1の赤い三角形を見ることができませんでした。

+0

あなたは 'glFlush'の代わりに' glFinish'を試しましたか? –

+0

はい、残念ながら – Krustenkaese

+0

あなたの「正しい」フレーム0には三角形を描画するコードが含まれていません。 – derhass

答えて

0

Shaderプログラムが0から1に切り替わったことを私がステートマシン状態とソーを比較したときの問題を解決しました。 レンダリング機能の開始時にshaderprogramsを0に戻してシェーダプログラムを無効にすると、 。

関連する問題