opengl红宝书_OpenGL(六)各种缓冲区介绍(2)

概述

本篇接着上篇介绍glGenBuffers()、glBindBuffers()、glBufferData(),下面图片来自红宝书第一章第五节:

e1c784793af8bb9b9e1549ce7277500a.png

935ea8224e66d8e3c2d2981c6b2481ad.png

cc782937b20a40f9cf4cf257723040de.png

glBindBuffer的8种类型的绑定点

66495766c974add2be39d907acf4be07.png

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红宝书第六章第八节-复杂纹理类型-缓存纹理。

e838ce65b732c9721b6b0c1f562c27e0.png

6014eb6061ea6bb15f2f16449b32a1d8.png

4.GL_UNIFORM_BUFFER

uniform缓冲区对象,UBO,当有复杂的uniform数据传输时很有用。

详情请见OpenGL红宝书第二章第四节-数据块接口。

b09a4f8e38276d4a0f020ec7dfc6b31e.png

5.GL_TRANSFORM_FEEDBACK_BUFFER

变换反馈缓冲区对象,后面有一章专门介绍这个,可以利用它在GPU中做一些物理模拟。

详情请见OpenGL红宝书第五章第四节-transform feedback。

c988a30c646906e57e8250691bfbd02d.png

6.GL_PIXEL_PACK_BUFFER和GL_PIXEL_UNPACK_BUFFER

像素缓冲区对象,PBO。

详情请见OpenGL红宝书第6.5.2节-使用Pixel Unpack缓存。

8751c5f2d434ab851499b16e84ac257b.png

e4ace3e1e3050cbbb86de2d942672e24.png

与之类似的还有:

8dbec2caf6c5f0bbc2a0fd1b3e9c8d76.png

7.GL_COPY_READ_BUFFER和GL_COPY_WRITE_BUFFER

复制缓冲区

详情请见OpenGL蓝宝书第9.1.2节-复制缓冲区。

21eb5c6fd8607d589d99945be9c2bb93.png

8.GL_DRAW_INDIRECT_BUFFER

这个暂时没有看见具体的用法,以后补充。

总结

由glGenBuffers()、glBindBuffers()、glBufferData()创建的缓冲区,以及其绑定的八种类型的绑定点是OpenGL中非常核心的一部分,OpenGL红宝书和蓝宝书中介绍的很多相关知识,基本上整本书都在围绕着这些缓冲区。红宝书上的每种缓冲区的例子在第一篇-概述提供的github网站中均可以找到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值