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

来源:互联网 发布:mac系统numbers教程 编辑:程序博客网 时间:2024/05/21 21:37

更多精彩图形学视频教程,请访问 http://www.oxox.work/


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_WRITEGLboolean *glUnMapBuffer(GLenum target);//表示当前绑定缓冲区对象的更新已经完成,与glMapBuffer()结合使用

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

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

6.清除缓冲区对象

void glDeleteBuffers(GLsizei n, GLuint *buffers);



1 0
原创粉丝点击