2017-03-11 5 views
0

PaintGLを呼び出さずにレンダリングルーチンを呼び出したいので、Qt OpenGL実装のモダンなルーチンを使ってマルチパスエフェクトをレンダリングしようとしています。 :PaintGLを使わないQOpenGLFramebufferObjectへのレンダリング

for i=0 i<npasses i++ 
    glwidget->renderlayer i 
glwidget->repaint //this calls PaintGL 

問題は、私はPaintGLのうちレンダー呼び出す機能している場合、すべてが狂っていることであり、それは大丈夫です代わりに、一方のレンダーのfuncionの私glwidget(つまりQOpenGLWidgetから継承)に私の全体のアプリの上に描かれますPaintGLの内部からしか呼び出されないので、期待どおりに動作します。

これについてのヒント?そのオフスクリーン表面に

QOpenGLWidget* widget = ...; 
QOpenGLContext* ctx = widget->context(); 

QOffscreenSurface surface; 
surface.setFormat(ctx->format()); 
surface.setScreen(ctx->screen()); 
surface.create(); 

その後再ターゲットとあなたのGLコンテキスト、あなたのFBOのレンダリングを行い、最終的に再ターゲット:

は、あなたがこのようなQOffscreenSurfaceを作成することができ、事前

+0

(http://doc.qt.io/qt-5/qopenglframebufferobject。 html#bind)をそのコンテキストに追加します。 –

答えて

0

にありがとうGLコンテクストバック。あなたが正しいのOpenGLコンテキストが現在/アクティブで、あなたの `QOpenGLFramebufferObject`は、[バインド]されていることを確認する必要がありrenderlayer``呼び出す前に

ctx->makeCurrent(&surface); 

// Bind FBO, do the rendering 

widget->makeCurrent(); 
関連する問題