概述
本篇接着上篇介绍glGenBuffers()、glBindBuffers()、glBufferData(),下面图片来自红宝书第一章第五节:
glBindBuffer的8种类型的绑定点
1.GL_ARRAY_BUFFER
顶点缓冲对象:Vertex Buffer Object,VBO,配合顶点数组对象使用。
unsigned int VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
2.GL_ELEMENT_ARRAY_BUFFER
索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO,配合glDrawElements使用。
unsigned int EBO;
glGenBuffers(1, &EBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);;
3.GL_TEXTURE_BUFFER
图片缓冲对象:Texture Buffer Object,TBO,配合glTexBuffer使用。Shader中变量为uniform samplerBuffer,使用texelFetch采样。
详情请见OpenGL红宝书第六章第八节-复杂纹理类型-缓存纹理。
4.GL_UNIFORM_BUFFER
uniform缓冲区对象,UBO,当有复杂的uniform数据传输时很有用。
详情请见OpenGL红宝书第二章第四节-数据块接口。
5.GL_TRANSFORM_FEEDBACK_BUFFER
变换反馈缓冲区对象,后面有一章专门介绍这个,可以利用它在GPU中做一些物理模拟。
详情请见OpenGL红宝书第五章第四节-transform feedback。
6.GL_PIXEL_PACK_BUFFER和GL_PIXEL_UNPACK_BUFFER
像素缓冲区对象,PBO。
详情请见OpenGL红宝书第6.5.2节-使用Pixel Unpack缓存。
与之类似的还有:
7.GL_COPY_READ_BUFFER和GL_COPY_WRITE_BUFFER
复制缓冲区
详情请见OpenGL蓝宝书第9.1.2节-复制缓冲区。
8.GL_DRAW_INDIRECT_BUFFER
这个暂时没有看见具体的用法,以后补充。
总结
由glGenBuffers()、glBindBuffers()、glBufferData()创建的缓冲区,以及其绑定的八种类型的绑定点是OpenGL中非常核心的一部分,OpenGL红宝书和蓝宝书中介绍的很多相关知识,基本上整本书都在围绕着这些缓冲区。红宝书上的每种缓冲区的例子在第一篇-概述提供的github网站中均可以找到。