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の赤い三角形を見ることができませんでした。
あなたは 'glFlush'の代わりに' glFinish'を試しましたか? –
はい、残念ながら – Krustenkaese
あなたの「正しい」フレーム0には三角形を描画するコードが含まれていません。 – derhass