そのため、コマンド glVertexAttribPointer に関する別の SO の質問を見ていましたが、少し混乱しました。この質問に対する受け入れられた回答は、次のように説明しています。
しかし、呼び出しを行ったときに属性 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);
コマンドを呼び出すとき、使用するバッファをどこで指定しますか?