glVertexAttribPointer

glvertexattribpointer.png

OpenGLが与えられたデータをどのように解釈するのかを指示するための関数です。
androidの場合、glBufferDataのあとはこれしか選択肢がない。

glVertexAttribPointer(アトリビュート変数の場所,1要素あたりの個数,型,正規化するかどうか,stride,データポインタ)

レンダリング時に使用するアトリビュート変数をシェーダに渡す関数。
この関数を呼ぶ前にglUseProgramでどのシェーダを使うか明確にしないといけない。

引数

index
アトリビュート変数の場所
size
xyzのベクトルなら3,ただのスカラー値の配列なら1。1,2,3,4が可能。
type
GL_FLOAT,GL_BYTEなどの型
normalized
GL_TRUEなら(-1.0,1.0)の範囲に正規化する.しないならGL_FALSE
stride
配列のストライド。連番なら0にする。 バイト数にする(少なくともOpenGL ESの場合はそう)
pointer
データの入っているポインターを渡す。VBOしてる場合は現在しているバッファからのオフセット値(byte数)を数値で渡せば良い。

この関数を呼んだ後

enableする必要がある。そしたらglDrawArraysを呼んだ時に使用される。
enableするにはこうする。

glEnableVertexAttribArray(index)
glDisableVertexAttribArray(index)

書き方の例

glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (const void*)(8 * sizeof(float)));
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)(8 * sizeof(float)));//これでもok

こういうマクロを書いておいて
#define BUFFER_OFFSET(offset) ((void *)(offset))
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0,BUFFER_OFFSET(8));

こんな風に書くのがRedbookのおすすめ

androidの場合

http://developer.android.com/reference/android/opengl/GLES20.html


gl opengl2 vbo vertex-array-object

サポートサイト Wikidot.com glopengl2vbovertex-array-object