Я использую старый способ предоставления данных в буфер вершин в OpenGLOpenGL 4, обеспечивающие данные в буфер вершин
glGenBuffers(1, buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(pos), pos, GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
С OpenGL 4.3 есть новый немного более четкий способ предоставления данных вершинного шейдера появляется
const GLfloat colors[] =
{
1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f
};
glBindVertexBuffer(1, buffer, 0, 3 * sizeof(GLfloat));
glVertexAttribFormat(1, 3, GL_FLOAT, GL_FALSE, 0);
glVertexAttribBinding(1, 1);
glEnableVertexAttribArray(1);
, но я не могу найти никаких ресурсов, объясняющих, как предоставлять данные по-новому. Конечно, я могу сделать это так:
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0); //i can do even so, and later I can use glBindVertexBuffer
, но это выглядит не очень элегантно. Если я не буду использовать glBindBuffer и только использовать glBindVertexBuffer, а затем использовать glBufferData, я перезапишу данные в буфере, который был связан с помощью glBindBuffer.
Итак, вопрос: могу ли я предоставить данные в буфер вершин другим способом, или я должен всегда использовать glBindBuffer, glBufferData и только после этого использовать glBindVertexBuffer, glVertexBufferFormat, glVertexAttribFormat и glVertexAttribBinding. Спасибо!
Спасибо за ваш ответ. Но в любом случае для использования glBufferData я должен связать буфер с помощью glBindBuffer раньше или существовать другим способом сообщить OpenGL, что я хочу поместить данные в буфер, который я связываю с помощью glBindVertexBuffer (использование обоих glBindBuffer для размещения данных и glBindVertexBuffer позже кажется немного неоднозначным для меня) ? – nameless323