OpenGL緩衝區物件

2021-06-19 10:21:03 字數 2005 閱讀 6297

opengl 緩衝區物件

今天學習了一下緩衝區物件.....

opengl是按照客戶機-伺服器模式設計的,在opengl需要資料的時候,都必須把資料從客戶機內傳輸到伺服器。

緩衝區物件,允許應用程式現實的指定把哪些資料儲存在圖形伺服器。

1.建立緩衝區物件

glgenbuffers():opengl分配n個當前未使用的名稱(非 0),表示緩衝區物件。

原型 : void glgenbuffers(glsizei n,gluint *buffers);

glboolean glisbuffer(gluint buffer):判斷乙個識別符號是否是當前使用的緩衝區物件的識別符號。

2.啟用緩衝區物件

啟用緩衝區物件,首先需要對他進行繫結。繫結緩衝區物件表示選擇未來的操作將影響到哪個緩衝區    物件。

glbindbuffer(glenum target ,gluint buffer): 指定了當前的活動緩衝區物件 。

3.用資料分配和初始化緩衝區物件

一旦繫結了乙個緩衝區物件,就需要保留空間以儲存資料。

void glbufferdata(glenum target,glsizeiptr size,const glvoid * data,glenum usage );

功能是分配size個儲存單位的opengl伺服器記憶體,用於儲存頂點資料或索引。以前有與當前緩衝區物件相關聯的資料將刪除。

glbufferdata()首先在opengl拂去其中分配記憶體以儲存資料。如果成功分配,data!=null,size個單位就會從客戶機記憶體複製到這個物件中。如果data=null,為資料保留適當的空間,但不會初始化。

在緩衝區物件中可以進行三種操作:繪圖 讀取 複製。

4.更新緩衝區物件的資料值

方法一:假設已經在用用程式的乙個緩衝區中準備了相同型別的資料,glbuffersubdata()將用我們提供的資料替換被繫結的緩衝區物件的一些資料子集。

void glbuffersubdata(glenum target,gluint offset,glsizei size,const glvoid *data); 用data 指向的資料更新 與target 相關聯的當前繫結緩衝區物件中從offset開始的size個位元組資料。

方法二:允許靈活的選擇需要更新的資料。

glvoid *glmapbuffer(glenum target,gluenum access):返回乙個指向緩衝區物件的指標,可以在這個緩衝區物件中寫入新值及更新之後,再呼叫glboolean glunmapbuffer(glenum target)表示已經完成了對資料的更新,取消對這個緩衝區的對映。如果只需要更新所需範圍內的資料值,也可呼叫glvoid *glmapbuffwerrange(glenum target,glintptr offset,glsizeiptr length,glbitfield access)

5.在緩衝區物件之間複製資料

void glcopybuffersubdata(readbuffer,writebuffer,resdoffset,writeoffset,size);

把資料從與readbuffer相關聯的緩衝區物件複製到繫結到writebuffer的緩衝區物件。

6. 清除緩衝區物件

gldeletebuffer(glsizei n,const gluint *buffers):刪除n個緩衝區物件。被刪除的當前緩衝區物件的所有繫結都重置為零。如果乙個緩衝區物件是在繫結時刪除的,這個物件的所有繫結都重置為預設的緩衝區物件。

7.使用緩衝區物件來儲存頂點陣列資料

需要以下步驟:

(1)生成緩衝區物件識別符號;

(2)繫結緩衝區物件,確定是儲存頂點資料還是索引;

(3)請求資料的儲存空間,並對資料元素進行初始化;

(4)指定相對於緩衝區起始位置的偏移量;

(5)繫結適當的緩衝區物件,用於渲染;

(6)使用適當的頂點陣列渲染函式進行渲染,比如gldrawarrays()

如果想初始化多個緩衝區物件,就需要為每個緩衝區物件重複以上。頂點陣列資料的所有格式都適用於緩衝區物件。

OpenGL緩衝區物件之FBO

在opengl渲染管線中幾何資料和紋理經過變換和一些測試處理,最終會被展示到螢幕上。opengl渲染管線的最終位置是在幀緩衝區中。幀緩衝區是一系列二維的畫素儲存陣列,包括了顏色緩衝區 深度緩衝區 模板緩衝區以及累積緩衝區。預設情況下opengl使用的是視窗系統提供的幀緩衝區。opengl的gl ar...

OpenGL緩衝區物件之VAO

vao vertex array object 是opengl用來處理頂點資料的乙個緩衝區物件,它不能單獨使用,都是結合vbo來一起使用的。vao是opengl coreprofile 引入的乙個特性。事實上在coreprofile中做頂點資料傳入時,必須使用vao方式。當我們使用vbo傳入頂點資料...

OpenGL緩衝區物件之EBO

ebo element buffer object,也叫ibo index buffer object 索引緩衝區物件,這個緩衝區主要用來儲存頂點的索引資訊。考慮這樣一種情況,我們需要繪製乙個立方體 在指定頂點座標的時候,可以使用以下的乙個陣列 glfloat vertices 可以看到事實上整個立...