《高效学习OpenGL》之缓冲区对象 glGenBuffers(), glBindBuffer(), glBufferData(),glMapBuffer()

1.创建缓冲区对象

void glGenBuffers(GLsizei n, GLuint *buffers);
//在buffers数组中返回当前n个未使用的名称,表示缓冲区对象
GLboolean glIsBuffer(GLuint buffer);
//判断是否是缓冲区对象

2.激活缓冲区对象

void glBindBuffer(GLenum target, GLuint buffer);
//指定当前活动缓冲区的对象

3.用数据分配和初始化缓冲区对象

void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
//target:可以是GL_ARRAY_BUFFER()(顶点数据)或GL_ELEMENT_ARRAY_BUFFER(索引数据)
//size:存储相关数据所需的内存容量
//data:用于初始化缓冲区对象,可以是一个指向客户区内存的指针,也可以是NULL
//usage:数据在分配之后如何进行读写,如GL_STREAM_READ,GL_STREAM_DRAW,GL_STREAM_COPY,如图


4.更新缓冲区数据值

GLvoid *glMapBuffer(GLenum target, GLenum access);
//提供对缓冲区对象包含的整个数据集合的更新
//access:GL_READ_ONLY,GL_WRITE_ONLY,GL_READ_WRITE

GLboolean *glUnMapBuffer(GLenum target);
//表示当前绑定缓冲区对象的更新已经完成,与glMapBuffer()结合使用

5.在缓冲区对象之间复制数据

void glCopyBufferSubData(GLenum readbuffer, GLenum writebuffer
							GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size);
//把数据从readbuffer相关联的缓冲区对象复制到writebuffer的缓冲区对象
//从readoffset开始移动size个数据的数量到wirteoffset中

6.清除缓冲区对象

void glDeleteBuffers(GLsizei n, GLuint *buffers);



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。