テクスチャ バッファ、イメージ ロードストア テクスチャ、シェーダ ストレージ バッファ、アトミック カウンタ バッファなどの最新の OpenGL (3+) 機能をサポートするために OpenGL 機能を拡張する Qt 用のライブラリを開発しています。変換などの機能を完全にサポートするためにフィードバック、私はユーザーがバッファ オブジェクトを異なる時間に異なるターゲットにバインドできるようにします (バッファに割り当てたデータに関係なく)。トランスフォーム フィードバックを使用して頂点データを 1 回進め、レンダリング用に別のプログラムにバインドする次のシナリオを考えてみましょう (残りのアプリケーション ランタイムに使用されます)。
// I attach a (previously allocated) buffer to the transform feedback target so that I
// can capture data advanced in a shader program.
glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, someBufferID);
// Then I execute the shader program...
// and release the buffer from the transform feedback target.
glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, 0);
// Then, I bind the same buffer containing data advanced via transform feedback
// to the array buffer target for use in a separate shader program.
glBindBuffer(GL_ARRAY_BUFFER, someBufferID);
// Then, I render something using this buffer as the data source for a vertex attrib.
// After, I release this buffer from the array buffer target.
glBindBuffer(GL_ARRAY_BUFFER, 0);
このシナリオでは、バッファ オブジェクトを複数のターゲットにバインドできると便利です。ただし、OpenGL 仕様でこの機能が問題を引き起こす状況があるかどうかはわかりません。基本的に、単一のバッファ オブジェクトを複数のターゲットにバインドできるようにするか、インスタンス化中に (標準の Qt バッファ ラッパーのように) ターゲットを強制する必要がありますか?
編集:状態のOpenGLドキュメントとして、作成/バインディングターゲットをTEXTUREオブジェクトと混合すると問題があることがわかりましたglBindTexture
:
GL_INVALID_OPERATION は、テクスチャがターゲットのターゲットと一致しないターゲットで以前に作成された場合に生成されます。
ただし、ドキュメントにglBindBuffer
はそのような問題はないと記載されています。