opengl中使用glsl著色器步驟
glsl既適用於頂點著色器,也適用於片段著色器。
使用著色器物件的步驟:
1、建立著色器物件:
gluint glcreateshader(glenum type);
//建立乙個著色器物件,type值必須是gl_vertex_shader或gl_fragment_shader。error返回0
glshadersource(gluint shader, glsizei count, const glchar** string, const glint* length);
3、編譯著色器物件的原始碼:
void glcompileshader(gluint shader);
glgetshaderiv(gl_cimpile_status); //查詢編譯結果
glgetshaderinfolog(gluint shader, glsizei bufsize, glsizei *length, char* infolog);
4、建立乙個空的著色器程式:
gluint glcreateprogram(); //if error, return 0;
5、把著色器物件連線到著色器程式:
glattachshader(gluint program, gluint shader); //gldetachshader(program, shader);
voi gllinkprogram(gluint program);
glgetprogramiv(gl_link_status); //查詢鏈結結果, gl_true represent success
glgetprograminfolog(gluint shader, glsizei bufsize, glsizei *length, char* infolog);
7、啟動頂點或片段著色器程式:
void gluseprogram(gluint program); //使用程式的物件控制代碼作為引數
eg:
gluint shader,program;
gluint compiled, linked;
const glchar* shadersrc = "
};shader = glcreateshader(gl_vertex_shader);
glshadersource(shader, 1, shadersrc, null);
glcompileshader(shader);
glgetshaderinfolog(shader, gl_compile_status, &compiled);
if(!compiled)
program =glcreateprogram();
glattachshader(program, shader);
gllinkprogram(program);
glgetprogramiv(program, gl_link_status, &linked);
if(linker)else
刪除著色器:
void gldeleteshader(gluint shader); //若正在被使用,標記為刪除,使用完後刪除
判斷是否是否是有效的著色器程式名:
glboolean glisprogram(gluint program); //gl_true
驗證乙個著色器是否可在當前的opengl狀態下執行:
void glvalidateprogram(gluint program);
//若驗證通過,gl_validate_status被設定為gl_true, 呼叫glgetprogramiv()查詢gl_validate_status的值。
GLSL 著色器相關
一 頂點著色器 頂點著色器,根據應用程式的設計,只是選擇處理 1.視覺空間變換 模型,法線,紋理 2.主顏色和輔助顏色的計算生成 光照在攝像機座標系中進行實時光照計算 3.紋理座標計算。4.霧座標設定和處理。5.點大小。1 透視除法。硬體實現。2 視口對映變換。硬體實現。3 圖元裝配,在4d裁剪空間...
opengl著色步驟
在opengl整個程式的初始化階段 一般是init 函式 做以下工作。1 頂點著色程式的源 和片段作色程式的源 要分別儲存到乙個字元陣列裡面 2 使用glcreateshader 分別建立乙個頂點著色器物件和乙個片段著色器物件 3 使用glshadersource 分別將頂點著色程式的源 字元陣列繫...
為何要在GLSL中使用UBO
關於ubo的介紹和使用詳情,請看 除了opengl手冊,應該沒有比這個更詳細的了。最近在乙個glsl專案中,需要迴圈繪製多塊buffer,而每次迴圈都要給buffer傳入大量的uniform,導致shader的渲染效率極低。比如之前的 是類似這個樣子 m pprogramblock sendunif...