25

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 は何を意味しますか?

4

2 に答える 2

51

一般に

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

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

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

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

GL_ARRAY_BUFFER

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

于 2013-02-10T22:39:24.137 に答える
4

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

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

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

いいえ、それらはunsigned ints のように使用されているだけですenum

于 2013-02-10T22:08:28.493 に答える