著色器基礎

2021-07-28 12:56:52 字數 2042 閱讀 6099

glsl基本型別

float:32位

double:64位

int:有符號二進位制補碼的32位整數

uint:無符號的32位整數

bool:布林值

儲存限制符

const:必須在宣告時就初始化,唯讀型別,編譯時常量

in:著色器階段的輸入變數

out:輸出變數

uniform:必須定義為全域性變數,不會在圖元處理過程中發生變化,在所有可用的著色器階段是共享的

buffer:設定應用程式共享的一塊可讀寫記憶體,也可作為儲存快取

shared:只能用於計算著色器中,設定變數在本地工作組中是共享的

引數限制符

in:將資料拷貝到函式中(預設)

const in:將唯讀資料拷貝到函式中

out:從函式中獲取

inout:將資料拷貝到函式中,並返回函式中修改的資料

著色器的編譯過程

對於每個著色器物件: 1)建立著色器物件                       

2)將著色器原始碼編譯為物件    

3)驗證編譯是否成功

對於每個著色器程式:1)建立著色器程式

2)將物件和程式關聯

3)鏈結著色器程式

4)判斷是否鏈結成功

5)使用著色器來處理頂點和片元

glcreateshader();

glshadersource();

glcompileshader();

glgetshaderinfolog();

glcreateprogram();

glattachshader();

gllinkprogram();

glgetprograminfolog();

gluseprogram();

載入shader

shaderinfo  shaders =,,

}; gluint program =loadshaders( shaders );

gluseprogram( program );

著色器子程式

....

gluseprogram(pro);

myshaderloc = glgetsubroutineuniformlocation(pro, gl_vertex_shader, "c:\")   //獲得子程式位置

myindex = glgetsubroutineindex(pro, gl_vertex_shader);                                         //獲取子程式在著色器中的索引號

gluniformsubroutinesuiv(gl_vertex_shaer,n,a);                              //指定執行哪乙個子程式

OpenGL著色器程式解析 著色器基礎

部分內容 於 現代opengl渲染管線嚴重依賴著色器來處理傳入的資料。如果不使用著色器,那麼用opengl可以做到的事情可能只有清除視窗內容了,可見著色器對於opengl的重要性。在opengl 3.0版本以前 含該版本 或者如果你用到了相容模式 compatibility prof?ile 環境,...

著色器(Shader)之畫素著色器

畫素著色器實際上就是對每乙個畫素進行光柵化的處理期間,在gpu上運算的一段程式。不同與頂點著色器,畫素著色器不會以軟體的形式來模擬畫素著色器。畫素著色器實質上是取代了固定功能流水線中多重紋理的環節,而且賦予了我們訪問單個畫素以及訪問每乙個畫素紋理座標的能力 多重紋理就是我們同時啟用多層紋理,然後規定...

OpenGL ES 著色器 片斷著色器詳解

opengl es 入門 01 opengl es 入門 02 opengl es 入門 03 opengl es 入門 04 opengl es 入門 05 opengl es 入門練習 01 opengl es 入門練習 02 opengl es 入門練習 03 opengl es 入門練習 0...