これまでのところ、イミディエイト、ディスプレイ リスト、頂点バッファー、頂点バッファー オブジェクトのレンダリングについて知っています。どれが一番速いですか? それぞれに必要な OpenGL のバージョンはどれですか? 何を使えばいいですか?
2 に答える
現在のレンダリングの最良の(そしてほとんど唯一の)方法は、汎用バッファー、別名頂点バッファーオブジェクトを使用することです。私が正しければ、これらは2.1からコアになっていますが、通常は1.5の拡張機能として表示されます(as ARB_vertex_buffer_object
)。それらはハードウェアをサポートしています。つまり、GPUメモリに直接保存することができます。
それらにデータをロードするときは、推奨される使用法を指定します。詳細については、glBufferDataのマニュアルをご覧ください。たとえば、GL_STATIC_DRAW
は静的ディスプレイリストに非常によく似ています。これにより、グラフィックカードからそれらへのアクセスを最適化できます。
最新の(読む:非古代の)ハードウェアは、即時モードを本当に嫌います。イミディエイトモードを頂点配列に置き換えることで、パフォーマンスがほぼ2桁向上することを確認しました。
OpenGL 3以降は、バッファオブジェクトのみをサポートし、他のすべてのレンダリングモードは非推奨になりました。
ディスプレイリストは正しく使用するのは大変な苦痛であり、古くないハードウェアでは価値がありません。
要約すると、OpenGL 3+を使用する場合は、(V)BOを使用する必要があります。OpenGL 2をターゲットにする場合は、必要に応じて頂点配列またはVBOを使用します。