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