2017-02-14 14 views
0

複数のターゲットにOpenGLバッファオブジェクトをバインドできますか?たとえば、バッファをターゲット配列バッファにバインドし、SHADER_STORAGE_BUFFERまたはいくつかのotgerターゲットに同じバッファをバインドします。バッファは最初の2番目または両方のターゲットにバインドされていますか?バッファを複数のターゲットにバインドする

答えて

1

OpenGLの仕様:

void [gl]BindBuffer(enum target, uint buffer);バッファという名前のバッファオブジェクト は、以前にバインドされていない場合は、GLはゼロサイズのメモリバッファを使用して初期化し、すべての を備えた、新しい状態 ベクトルを作成し、表に記載されている同じ初期値の状態と...

そして

BindBufferを使用して、既存のバッファオブジェクトをバインドすることもできます。 バインドが成功した場合、新たにバインドされた バッファオブジェクトの状態は変更されず、以前のターゲットへのバインディングはすべて破損します。だから、

、はい:あなたは、同じ名前を使用します(glGenBuffersで作成したもの)と異なる使用(OpenGLの用語でターゲット)と、この既存のバウンドバッファをバインドすることができます。しかし、私はこれを行う理由を考えることができません。

+0

ありがとうございました。これをやりたいのは私のプログラムでは、ARRAY ELEMENT BUFFERを使ってバッファをVAOに接続できるようにしたいのです。これは実際にはVBOに添付された「IBOを作成する」でしょう。その後、私がIBOを編集したいと思ったら、それをARRAY BUFFERにバインドし、VAOからのアタックを心配する必要はありません。問題は、バッファをARRAY BUFFERにバインドするかどうかで、バインドされているVAOからバッファをアン結合するかどうかです。 – pdid

+0

ARRAY BUFFERの前にARRAY ELEMENT BUFFERだったときにバインドすると、以前のバインドが解除されます。あなたの理由がデータを変更している場合は、 'glBufferSubData'を使用しないでください。 – Ripi2

+0

@ Ripi2: "*は以前のバインディングを破る*"あなたが仕様を引用したように、以前の 'GL_ARRAY_BUFFER'ターゲットバインディングを壊します。しかし、そのバッファの他のバインド位置は変更されません。 –

関連する問題