Так что я смотрел на another SO question regarding the command glVertexAttribPointer, и я натолкнулся на небольшое замешательство. Принятый ответ на этот вопрос объясняет,Могу ли я иметь несколько буферов GL_ARRAY_BUFFER?
Но есть дополнительная подразумеваемая часть состояния, которое также храниться для атрибута 0, когда вы делаете вызов: данные считываются из буфера в настоящее время связанно с GL_ARRAY_BUFFER
Это имеет смысл для меня, но что делать, если у меня есть несколько буферов, которые связаны как GL_ARRAY_BUFFER
? Как метод glVertexAttribPointer()
знает, какой из них установить атрибуты?
Например, в моем коде я рисую градиентный треугольник. Для этого я создал 2 VBOs, один с цветовыми данными в массиве, а другой с точками вершин.
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);
Когда я вызываю команду, где указать, какой буфер использовать?