web-dev-qa-db-ja.com

glBindBufferでGL_ARRAY_BUFFERターゲットは何を意味しますか?

VBOについて混乱していました。

glGenBuffers(1, &positionBufferObject);
glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);

GL_ARRAY_BUFFERの他に、他のターゲットタイプがあります:GL_ATOMIC_COUNTER_BUFFER、GL_COPY_READ_BUFFER ...

ただし、Openglマニュアルでは、これらのターゲットの意味については触れられていません。 glew.hを確認しました。

#define GL_ARRAY_BUFFER 0x8892

これは、ターゲット(GL_ARRAY_BUFFERなど)がアドレスであることを意味しますか?

ターゲット-glBindBufferのGL_ARRAY_BUFFERはどういう意味ですか?

22
lightrek

一般に

ほとんどの OpenGLオブジェクト を使用するには、「ターゲット」と呼ばれるOpenGLコンテキスト内の場所にバインドする必要があります。ターゲットは、オブジェクトがバインドされているコンテキスト内の場所にすぎません。

オブジェクトタイプ(バッファ、テクスチャなど)によってターゲットのセットが異なります。一般的に、各ターゲットには特定の意味があります。1つのオブジェクトを1つのターゲットにバインドするということは、ターゲットがバインドされたオブジェクトをターゲットが使用する方法でそのオブジェクトを使用することを意味します。

オブジェクトを1つのターゲットにバインドしても、そのオブジェクトが別のターゲットにバインドされているかどうかには影響しません(テクスチャオブジェクトでない限り、ターゲットの扱いが異なります)。

オブジェクトを変更したり、バインドされたオブジェクトからデータを照会したりする関数があります。それらは、変更/照会しているオブジェクトがバインドされているターゲットを受け取ります。

GL_ARRAY_BUFFER

GL_ARRAY_BUFFERバッファオブジェクト のターゲットは 頂点属性データにそのバッファオブジェクトを使用する の意図を表します。ただし、このターゲットにバインドするだけでは何も起こりません。 glVertexAttribPointer(または同等の関数) への呼び出しのみが、その属性の属性データのターゲットにバインドされたバッファーを使用します。

49
Nicol Bolas

ただし、Openglマニュアルでは、これらのターゲットの意味については触れられていません。

OpenGL 2.1仕様、38ページ、セクション2.9.1:「バッファーオブジェクトの頂点配列」

これは、ターゲット(GL_ARRAY_BUFFERなど)がアドレスであることを意味しますか?

いいえ、それらはunsigned intsはenumsのように使用されます。

3
genpfault