这是一些绘制到屏幕上的简单代码。
GLuint vbo;
glGenBuffers(1, &vbo);
glUseProgram(myProgram);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
//Fill up my VBO with vertex data
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexes), &vertexes, GL_STATIC_DRAW);
/*Draw to the screen*/
这工作正常。但是,我尝试更改一些 GL 调用的顺序,如下所示:
GLuint vbo;
glGenBuffers(1, &vbo);
glUseProgram(myProgram);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
//Now comes after the setting of the vertex attributes.
glBindBuffer(GL_ARRAY_BUFFER, vbo);
//Fill up my VBO with vertex data
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexes), &vertexes, GL_STATIC_DRAW);
/*Draw to the screen*/
这使我的程序崩溃。GL_ARRAY_BUFFER
为什么在设置顶点属性时需要绑定一个 VBO ?对我来说,glVertexAttribPointer
所做的只是设置 OpenGL 最终用来绘制事物的顶点格式。它不是特定于任何 VBO。因此,如果多个 VBO 想要使用相同的顶点格式,则无需再次格式化 VBO 中的顶点。