OpenGL4.3如何管理buffer中的数据的

本文介绍了OpenGL4.3中管理缓冲区数据的方法,包括glGenBuffers分配缓存对象名,glBindBuffer指定缓存类型并创建实体,glBufferData分配和填充缓存,以及如何更新和清理缓存内容。此外,还讨论了如何将多个数据绑定到同一缓存对象的不同位置,以及缓存复制功能。
摘要由CSDN通过智能技术生成

OpenGL4.3如何管理buffer中的数据的

继前面的《OpenGl编程指南》第八版学习后终于来到了第三章的内容,这一章首先介绍了一下绘制图形的原语,这部分与我之前看到的各个版本的OpenGl大同小异,就不赘述了,第三章用很重的笔墨分析了一下新版本的OpenGl是如何管理缓存数据的,就是之前提到过数次的gen,bind,buffer几个命令。既然读到这里就做一下笔记,以免日后忘记。

1. glGenBuffers类命令

通常,新版本的OpenGl管理内存都是从类似于glGenBuffers这个命令开始的,此函数的通用定义为:

void glGenBuffers(GLsizei n, GLuint *buffers);

函数说明:分配n个未使用的缓存对象的名字,存储在*buffers制定的数组中
入口参数:GLsizei n:分配名字的数量
*buffers:存储名字的数组地址
出口参数:无

请注意,这里*buffers表示的是一个数组的首地址,也就是要求分配n个缓存对象并把他们的名称(索引,地址,叫什么都可以)以GLint类型存在数组内。这里注意分配的是缓存对象名字而不是分配了缓存块。
在红宝书内特意强调了,这里仅分配了名字,就连对象本身都没有生成,一定要注意!
那么为什么弄得这么麻烦呢?下一个命令很好的解释了原因。

2. glBindBuffer类命令

因为OpenGL有很多类型的缓存,他们分工不同,特性不同,且互相独立(见下表),因此把指定此前生成的对象用来控制哪个缓存的工作分离开来,用glBindBuffer类的命令来指定,在执行这个命令后,OpenGL会生成一个控制指定缓存的对象的实体,如此OpenGL可以保证这些对象用合适的策略来管理缓存。
函数原形:

void glBindBuffer(GLenum target, GLuint buffer); 

函数说明:绑定缓存名称到对应的缓存,如果此前没有为此对象绑定过,则分配新的缓存对象,如果已有对象,则将其激活为缓存中的当前对象,如果为0,则撤销此对象
入口参数:GLenum target:缓存类型
GLuint buffer:此前分配的缓存“名字”
出口参数:无

下表是“绑定目标”的说明表格:

名称 说明
GL_ARRAY_BUFFER 用于设置顶点数组的绑定点,glVertexAttribPointer()函数会用到这个绑定点,并会经常出现在后面的例程中
GL_COPY_READ_BUFFER 与下面的命令共同提供了一个在缓存间拷贝数据的缓存,在这个缓存拷贝数据不会影响到OpenGL的状态,并且它可以用于其他任何对OpenGL特殊的操作的目的
GL_COPY_WRITE_BUFFER 同上
GL_DRAW_INDIRECT_BUFFER 用于存储间接绘图参数的缓存,在书中后续章节会解释
GL_ELEMENT_ARRAY_BUFFER 绑定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值