2011-12-09 22 views
3

私は画面にblitする必要があるフレームを提供するライブラリを使用しています。私はバッファを割り当て、このライブラリはこのバッファに直接書き込みます。私が必要なときは、このバッファの指定された部分を画面にblitする必要があります。 QtをOpenGL/ESペイントエンジンでレンダリングしています。RGBA32ピクセルをOpenGL ESテクスチャに直接保存する

質問:画面にブリットする最も速い方法は何ですか?私は現在、データへのポインタを受け取るコンストラクタを使用してQImageにバッファをロードしています。これはコピーを避けるべきです。次に、QPainterのdrawImageメソッドを使用して、正しい領域を画面に表示します。私はこのメソッドがGPUのメモリに領域のコピーをロードし、OpenGLのテクスチャを使用して画面にブリットすると思います。

処理速度を上げるためにこのコピーを避けることは可能でしょうか?たとえばOpenGLテクスチャで直接描画してGPUに転送する必要はありませんか?ピクセルバッファオブジェクトを読みました。それは解決策かもしれませんか?この目的のためにQGLFramebufferObjectを使うことができますか?

答えて

1

最終的にGPUに書き込む必要があります。不要なコピーの数を最小限に抑えるだけでなく、CPU内の変換(RGBAからBGRAなど)を最小限に抑えることができます。

私はQImageとQPainterで始まり、optomiseを開始する前にグラフィックスピードが制限のステップであるかどうかを確認します。

this linkをご覧ください。

一般的なOpenGLのアドバイスの多くは、opengl-ESには当てはまりませんので、ESをOpenGLにとっては全く別のコンセプトと考えるのが最善です。

+0

現時点では、計算なしでロードされるようなRGBA32形式をロードしています。 「グラフィックスピードが制限のステップであるかどうかを確認する」とはどういう意味ですか? –

+0

アプリケーションでネットワーク転送、計算、または応答が1秒かかる場合、GPUコールで数ミリ秒を保存するためにOpenGLを調整することは、あなたの時間を費やす最善の方法ではありません。もちろん、1080p60のHDビデオを携帯電話で再生しようとしているのなら、それはそうです! –

+0

フレームはアニメーションを生成します。そのため、パフォーマンスは基本的なものです。私が良くなればなるほど、アニメーションはスムーズになります。 –

関連する問題