OpenGLでバッファオブジェクト関数(glBufferData
、glBufferSubData
、そしておそらくいくつかの他)は、パラメータ持つusage
可能性の高い実装歩留まりより良いパフォーマンスを助けるためのもの使用目的、のヒントとして文書による説明を。
使用法
データストアの予想される使用パターンを指定します。シンボル定数でなければなりません
GL_STREAM_DRAW
、GL_STREAM_READ
、GL_STREAM_COPY
、GL_STATIC_DRAW
、GL_STATIC_READ
、GL_STATIC_COPY
、GL_DYNAMIC_DRAW
、GL_DYNAMIC_READ
、またはGL_DYNAMIC_COPY
。
[...]
使用法は、バッファオブジェクトのデータストアへのアクセス方法に関するGL実装へのヒントです。これにより、GL実装は、バッファーオブジェクトのパフォーマンスに大きな影響を与える可能性のあるよりインテリジェントな決定を行うことができます。ただし、データストアの実際の使用は制限されません。
wikiも同様にあいまいです。
結局のところ、これらはヒントにすぎません。作成後にSTATICバッファーを変更すること、またはSTREAMバッファーを変更しないことは、完全に正当なOpenGLコードです。
[...]
これらは、慎重なプロファイリングでのみ回答できる質問です。そして、それでも、答えはその特定のハードウェアベンダーからの特定のドライバーバージョンに対してのみ正確になります。
結局のところ、このパラメーターはどの程度関連性がありますか?ドライバーは実際にそれを考慮に入れていますか?それを考慮に入れている場合、実際のパフォーマンスにどの程度影響を与えますか?共有するデータはありますか?
私は既存のAPIのいずれかとして実装されることを意図した薄いグラフィックAPI抽象化レイヤーを作成しました。このパラメーターを完全に無視して、公開された抽象化からそれを非表示にしたくなります。