所以我在看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);
当我调用命令时,我在哪里指定要使用哪个缓冲区?