openGL超級寶典 筆記 8 1緩衝區

2021-08-01 20:24:12 字數 1994 閱讀 3704

特性:緩衝區儲存在gpu視訊記憶體中,可提供高速高效的訪問視訊記憶體的方式。

作用:

- 可以將資料從乙個渲染管線移動到另乙個渲染管線(gpu視訊記憶體中).

- 可以從乙個物件繫結到另乙個物件.

- 可以將gpu中資料移動到合適位置,不需cpu介入。如pbo移動資料到texture中

緩衝區的建立,binding, 刪除的示例**如下:

// step1: 為新緩衝區建立名稱

gluint pixbufobject[1];

glgenbuffer(1, pixbufobject);

// step2: 根據不同的繫結點也就是目的,使用緩衝區

// 下例中,是以畫素包裝緩衝區繫結點,使用glreadpixels將畫素資料複製到緩衝區中。

glbindbuffer(gl_pixel_pack_buffer, pixbufobject[0]);

//step3:對乙個緩衝區解除繫結,則可調用以0為緩衝區名稱

glbindbuffer(gl_pixel_pack_buffer, 0);

//step4: 用完緩衝區後,清除緩衝區, 則deletebuffers + 緩衝區名

gldeletebuffers(1, pixbufobject);

緩衝區可以先分配,再設定繫結點。繫結點的不同,作用也不同。opengl通常有如下的繫結點。

繫結點作用

gl_array_buffer

資料緩衝區儲存顏色,位置,紋理座標或其它自定義屬性

gl_copy_read_buffer

指定 glcopybuffersubdata 複製的資料來源

gl_copy_write_buffer

指定 glcopybuffersubdata 要複製到的地方(目標)

gl_element_array_buffer

索引資料緩衝區用於儲存gldrawelements, gldrawrangeelements, gldrawelementsinstanced 的索引。

gl_pixel_pack_buffer

指定glreadpixels等將畫素拷貝到的目標地方。

gl_pixel_unpack_buffer

glteximage**, gltexsubimage**,等紋理更新函式的源緩衝區

gl_texture_buffer

通過紋理單元拾取來訪問的緩衝區。

gl_transform_feedback_buffer

變換反饋頂點著色器寫入的緩衝區

gl_uniform_buffer

著色器能訪問的uniform值

上面的各個繫結點,代表不同的buffer的用法。如pbo常繫結gl_pixel_pack_buffer,tbo指繫結gl_texture_buffer,ubo指繫結gl_uniform_buffer,vao中常使用gl_array_buffer等。後續的很多緩衝區的用法,都是根據繫結點不同來使用的。

填充緩衝區,也就是將資料傳遞到緩衝區中。通常是從cpu拷貝記憶體到gpu端。

glbindbuffer(gl_pixel_pack_buffer, pixbufobject[0]);

// 引數1 gl_pixel_pack_buffer,需與bindpoint 一致

// 引數2 資料大小,以位元組byte為單位。

// 引數3:pixeldata 將要被上傳的資料本身。當為null時,表示申請特定大小的緩衝區,而不是立即上傳資料。

// 引數4 告訴gl如何使用緩衝區。gl_dynamic_copy表示應用程式經常更新

glbufferdata(gl_pixel_pack_buffer, pixeldatasize, pixeldata, gl_dynamic_copy);

glbindbuffer(gl_pixel_pack_buffer, 0);

緩衝區結束了傳統很多操作需要gpu到cpu,cpu到gpu的效率低下的方式,帶來opengl極大的提公升。

讀書筆記 OpenGL超級寶典

對於某些函式的理解 glclear和glclearcolor glclearcolor指定glclear清除特定緩衝區時使用的值。glflush 讓所有已傳送的命令盡快的由實際的繪製引擎執行。glviewport 前兩個引數指的是左下角。glpushmatrix glrotatef glbegin和...

OpenGL 3D 超級寶典學習筆記

2d笛卡兒座標 由乙個x座標和乙個y座標構成,x座標測量水平方向的位置,而y座標則測試垂直方向的位置,原點 x 0,y 0 兩根軸從負無窮擴充套件到正無窮,兩軸垂直相交。視口viewport 裁剪區域的高度與寬度一般不與視窗的寬度與高度相匹配,因此座標系統從邏輯笛卡兒座標對映到物理螢幕畫素座標,這種...

OpenGL超級寶典筆記(n)PBO緩衝區

前略好幾章都沒放上來,以後再補上吧。之前一直使用gltools的glbatch來填充資料傳給shader,現在直接用自己的buffer來傳資料了。不外乎幾步 弄乙個buffer指標,其實弄乙個buffer陣列也可以了,陣列可以記得個數,指標可不能,容易出事兒 就這麼著吧,算是上一步弄了個buffer...