2011-09-10 7 views
2

OpenGLが実際に描画するものを描画するのはいつですか?それは特定の描画関数またはバッファスワップの呼び出しでですか?
は、私はこのような何かを行うことができるかどうか、これは見て知りたい:OpenGL描画時間

SomeTimer Timer; 

Timer.Start(); 
glDrawArrays(...); 
long time = Timer.Stop(); 

描画が最も時間がかかるかを見るために、それに基づいて最適化します。
重要なのは、2dだけで、ステンシル/デプスや他のバッファテストは使用していません。

答えて

2

そのコードは機能しません。 OpenGLコマンドは、定義上、動作において非同期であると仮定される。 GLコマンドは、完了する前にパラメータを完全に書き込んだり、読み込んだりする必要があります。しかし、その外では、すべての賭けはオフです。

タイミング任意のglDraw*コールは、その関数呼び出しが完了するのにかかる時間だけを通知します。レンダリングがどれくらいの間完了するかについては何も言わない。

more thorough discussion of this subject is available

レンダリングに時間がかかることがありますが、OpenGLの方法で行う必要があります。 ARB_timer_queryでは、OpenGLコマンドがに完了するまでにどれくらい時間がかかりますか?をOpenGLに渡すだけではありません。この拡張はOpenGL 3.3の中核であり、さまざまなレベルのハードウェアで広く利用できます。かなり多くのGPUはまだその所有者によってサポートされているこれを実装します。