私はanother SO question regarding the command glVertexAttribPointerを見ていて、やや混乱しました。この質問への受け入れ答えは、説明複数のGL_ARRAY_BUFFERバッファを使用できますか?
にバインドされたバッファから読み出されますしかし、あなたが電話をかける際にも属性0のために離れて保存されている状態の追加の暗黙の作品があります:データは、現在GL_ARRAY_BUFFER
これは意味がありますが、GL_ARRAY_BUFFER
というバインドされたバッファが複数ある場合はどうなりますか? glVertexAttribPointer()
メソッドは、属性を設定する方法をどのように知っていますか?
たとえば、私のコードでは、グラデーション三角形を描いています。これを行うために、2つのVBOを作成しました.1つは色データを配列に、もう1つは頂点の位置にします。
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
static const GLfloat points[] = {
//data here
};
static const GLfloat colors[] = {
//data here
};
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
vs = glCreateShader(GL_VERTEX_SHADER);
fs = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(vs, 1, &vertexShaderData, NULL);
glShaderSource(fs, 1, &fragShaderData, NULL);
glCompileShader(vs);
glCompileShader(fs);
sp=glCreateProgram();
glBindFragDataLocation(sp, 0, "outColor");
glAttachShader(sp, vs);
glAttachShader(sp, fs);
glLinkProgram(sp);
glUseProgram(sp);
glGenBuffers(1, &colorBuffer);
glBindBuffer(GL_ARRAY_BUFFER, colorBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors, GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
glDrawArrays(GL_TRIANGLES, 0, 9);
コマンドを呼び出すと、使用するバッファはどこで指定できますか?