特性:緩衝區儲存在gpu視訊記憶體中,可提供高速高效的訪問視訊記憶體的方式。
作用:
- 可以將資料從乙個渲染管線移動到另乙個渲染管線(gpu視訊記憶體中).
- 可以從乙個物件繫結到另乙個物件.
- 可以將gpu中資料移動到合適位置,不需cpu介入。如pbo移動資料到texture中
緩衝區的建立,binding, 刪除的示例**如下:
緩衝區可以先分配,再設定繫結點。繫結點的不同,作用也不同。opengl通常有如下的繫結點。// 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);
繫結點作用
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端。
緩衝區結束了傳統很多操作需要gpu到cpu,cpu到gpu的效率低下的方式,帶來opengl極大的提公升。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);
讀書筆記 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...