所以我在看another SO question regarding the command glVertexAttribPointer,我遇到了一些困惑。在接受這個問題的答案解釋,我可以有多個GL_ARRAY_BUFFER緩衝區嗎?
緩衝區中讀取但有狀態的附加隱含一塊也存儲離開屬性0,當你撥打電話:將數據從當前綁定到GL_ARRAY_BUFFER
這對我有意義,但是如果我有多個緩衝區綁定爲GL_ARRAY_BUFFER
? glVertexAttribPointer()
方法如何知道哪個設置屬性?
例如,在我的代碼中,我繪製了一個漸變三角形。爲此,我創建了2個VBO,一個是數組中的顏色數據,另一個是頂點位置。
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);
當我調用命令時,我在哪裏指定要使用哪個緩衝區?