《高效學習OpenGL》之緩衝區物件 glGenBuffers(), glBindBuffer(), glBufferData(),glMapBuffer()

huangbangqing12發表於2014-02-17

更多精彩圖形學視訊教程,請訪問 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_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);



相關文章