误区一:
给 VBO 赋予数据时,即 调用
glBindBuffer(GL_ARRAY_BUFFER,vbo)
glBufferData(GL_ARRAY_BUFFER,sizeof(data),GL_STATIC_DRAW)
这两个函数时,需要事先 通过glBindVertexArray() 绑定到一个 VAO 上。
勘误:
实际上,glBufferData(),把 数组数据 写入 一个 vbo 时,完全没有必要绑定 glBindVertexArray() 一个 VAO.
道理也很简单:我要给一个 vbo 写入数据,其实并不关心 vao是哪个,跟我要写数据这件事完全没有关系!
只有在 把 vbo 的数据,真正传递到 shader 时候,也就是 调用 glVertexAttribPointer() 等针对 shader 的操作时(比如 glUseProgram,glEnableVertexAttribArray )时,才必须明确指定绑定到哪个 VAO 上.
在 glBufferData() 时,只是简答的给一个 vbo 传数据,跟 shader 无关,完全没有必要 bind 任何 VAO.
误区二:
关于 glVertexAttribPointer() 调用时,给 shader 传递数据时的 stride 参数的问题。
比如有这样的数据:
GLfloat vertexData[18] = {
-1,-1,0,//p1 pos
1,0,0,//p1 color red
1,-1,0,//p2 pos
0,1,0,//p2 color green
0,1,0,//p3 pos
0,0,1.//