緩衝區物件

2021-05-25 00:36:39 字數 2277 閱讀 6939

今天在做cuda的程式,突然出現了有關opengl緩衝區物件的函式,這讓我很是糾結,因為我的opengl的基礎不是很好,才接觸不到乙個月,今天我就稍微介紹一下緩衝區物件的有關函式。(參考opengl程式設計指南)

在許多opengl操作中,我們向opengl傳送一大塊資料,例如向它傳遞需要處理的頂點資料。傳輸這種資料可能非常簡單,例如把資料從系統的記憶體中複製到圖形卡。但是,由於opengl按照客戶機-伺服器模式而設計的,在opengl需要資料的任何時候,都必須把資料從客戶機記憶體傳輸到伺服器。如果資料並沒有被修改,或者客戶機和伺服器位於不同的計算機(分布式渲染),資料的傳輸可能會比較緩慢,或者是冗餘的。

操作的步驟如下:

1.建立緩衝區物件

任何非0的無符號整數都可以作為緩衝區物件的識別符號使用。

為了讓opengl分配緩衝區物件識別符號,可以呼叫glgenbuffers()函式。

(1)void glgenbuffers(glsizei n, gluint* buffers);

函式功能:在buffers陣列中返回n個當前未使用的名稱,表示緩衝區物件。

引數:n表示要分配的緩衝區物件的個數;buffers用來儲存緩衝區的物件識別符號。

返回值:void。

(2)glboolean glisbuffer(glunit buffer);

函式功能:判斷乙個識別符號是否是乙個當前被使用的緩衝區物件的識別符號;

引數:buffer表示要判斷的緩衝區物件識別符號;

返回值:如果是乙個已經被繫結的緩衝區物件的名稱,而且還沒被刪除,就返回    gl_true;否則,返回gl_false。

2.啟用緩衝區物件

為了要啟用緩衝區物件,首先需要將它繫結。

void glbindbuffer(glenum target, gluint buffer);

函式功能:指定當前的活動緩衝區物件;

引數:target必須設定為gl_array_buffer或gl_element_array_buffer,buffer指定了將要繫結的緩衝區物件。

glbindbuffer()完成3個任務之一:(1).當buffer是個首次使用的非零無符號整數時,它就建立乙個新的緩衝區物件,並把buffer分配給這個緩衝區物件,作為它的名稱;(2). 當繫結到乙個以前建立的緩衝區物件,這個緩衝區物件便成為活動的緩衝區物件;(3).當繫結到乙個值為0的buffer時,opengl將會停止使用緩衝區物件。

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

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

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

函式功能:分配size個儲存單位的opengl伺服器記憶體,用來儲存頂點資料或索引。

引數:target可以是gl_array_buffer(表示頂點資料)、gl_element_array_buffer(表示索引資料)、gl_pixel_unpack_buffer(表示傳遞給opengl的畫素格式)或gl_pixel_pack_buffer(表示從opengl獲取資料的畫素格式);size是儲存相關資料所需要的記憶體數量;data可以是個指向客戶機記憶體的指標,也可以是null,如果它所傳的是個有效的指標,size個單位的儲存空間就從客戶機複製到伺服器,如果它所傳遞的是null,這個函式將會保留size個單位的儲存空間供以後使用,但不會初始化;usage提供了乙個提示,就是資料在分配之後將如何進行讀取和寫入。

返回值:如果請求分配的記憶體數量超過了伺服器能夠分配的記憶體,就返回gl_out_of_memory。

4.清除緩衝區物件

完成了緩衝區物件的操作之後,我們就要釋放它的資源。

void gldeletebuffers(glsizei n, const gluint * buffers);

函式功能:刪除n個緩衝區物件,它們的名稱就是buffers陣列的元素;

引數:n表示緩衝區個數,buffers表示要刪除的緩衝區物件名稱;

返回值為空。

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

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

(2)繫結乙個緩衝區物件;

(3)請求資料的儲存空間;

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

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

(6)使用適當的頂點陣列渲染函式進行渲染。

OpenGL緩衝區物件

opengl 緩衝區物件 今天學習了一下緩衝區物件.opengl是按照客戶機 伺服器模式設計的,在opengl需要資料的時候,都必須把資料從客戶機內傳輸到伺服器。緩衝區物件,允許應用程式現實的指定把哪些資料儲存在圖形伺服器。1.建立緩衝區物件 glgenbuffers opengl分配n個當前未使用...

輸入緩衝區與輸出緩衝區

本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...

使用者程序緩衝區和核心緩衝區

常常聽到有程式設計師會跟你討論 我們在讀寫檔案的時候,系統是有快取的 但實際上有一部分人把使用者程序緩衝區和系統空間的緩衝區的概念混淆了,包括這兩種緩衝區的用法和所要解決的問題,還有其它類似的概念。本文就來區分一下不同的緩衝區概念 主要針對類unix平台 使用者程序和作業系統的關係 首先我用一張圖來...