Запуск очень простого рисования примера треугольника, я пытаюсь выяснить, какие строки относятся конкретно к определению VAO и какие другие могут разваливаться.OpenGL - Правильное разделение определения VAO из создания VBO и других буферов
В настоящее время я использую этот код:
создания буфера & начинка:
TriangleVertices = new float[9]
{
0.0f, 1.0f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
};
TriangleColors = new float[12]
{
1.0f, 0.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 1.0f,
};
glGenBuffers(1, &VertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer);
glBufferData(GL_ARRAY_BUFFER, 9*sizeof(float), TriangleVertices, GL_STATIC_DRAW);
glGenBuffers(1, &ColorsBuffer);
glBindBuffer(GL_ARRAY_BUFFER, ColorsBuffer);
glBufferData(GL_ARRAY_BUFFER, 12*sizeof(float), TriangleColors, GL_STATIC_DRAW);
glGenVertexArrays(1, &VAOID);
VAO определение:
glBindVertexArray(VAOID);
glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, ColorsBuffer);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
Loop Drawing
glBindVertexArray(VAOID);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
Пример выполняется нормально, если в цикле рисования я включаю определение VAO для каждого фрейма, но он не работает, если я определяю VAO только один раз, прежде чем начинать рисовать, поэтому я думаю, что определение VAO не содержит какого-либо кода.
Что мне не хватает?
Это не так, как VAOs должны работать. Состояние включения для каждого массива атрибутов является частью состояния VAO. неясно, в чем заключается ваша эксцесс. – derhass
@derhass Вы правы. Я думал, что я использую только пример треугольника, но у меня есть еще один призыв, который явно сталкивается с этим. Я отредактирую ответ. –