著色器指令碼的載入及編譯

2021-08-04 21:44:05 字數 1388 閱讀 6205

要使用著色器對影象進行渲染則需要將著色器內容載入並編譯

public static string loadfromassetsfile(string fname,resources r)

byte buff=baos.tobytearray();

baos.close();

in.close();

result=new string(buff,"gbk");

result=result.replaceall("\\r\\n","\n");

}catch(exception e)

log.e(fname,result);

return result;

}

本段的作用為將fname檔案中的指令碼內容讀取到字串result中,並返回result

public static int loadshader(

int shadertype, //shader的型別 - - - 兩種選擇 - - -gles20.gl_vertex_shader gles20.gl_fragment_shader

string source //shader的指令碼字串)}

return shader;

}

本段的作用為建立乙個著色器,載入原始碼並編譯,若成功則返回此著色器的id,其中source為上段讀取到的字串result。

//建立shader程式的方法

public static int createprogram(string vertexsource, string fragmentsource)

//載入片元著色器

int pixelshader = loadshader(gles20.gl_fragment_shader, fragmentsource);

if (pixelshader == 0)

//建立程式

int program = gles20.glcreateprogram();

//若程式建立成功則向程式中加入頂點著色器與片元著色器

if (program != 0)

}return program;

}

本段的作用為建立著色器程式,將頂點著色器與片元著色器(通過id)加進程式鏈結程式,若成功則返回程式id

當我們使用著色器進行渲染時,只需拿到此著色器的id即可判斷使用哪套著色器進行渲染以及資料的初始化

最後還可對每一步操作進行檢查,方便除錯

//檢查每一步操作是否有錯誤的方法

public static void checkglerror(string op)

}

OpenGL ES 著色器指令碼

static char vshaderstr attribute vec4 a position n attribute vec4 a color n varying vec4 v color n void main n n static char fshaderstr ifdef gl es n ...

著色器指令碼語言使用方法

uniform 輸入著色器的唯讀值,儲存資料用的,例如轉換矩陣 光照引數或者顏色。基本上各種輸入著色器的常量引數像頂點和片段應該是uniform。uniform宣告全域性變數,頂點著色器中宣告的uniform,片元著色器也可以使用。另,不同平台對個數有限制,詳情可以查資料。e.guniform ma...

《OpenGL程式設計指南》一2 5 著色器的編譯

opengl著色器程式的編寫與c語言等基於編譯器的語言非常類似。我們使用編譯器來解析程式,檢查是否存在錯誤,然後將它翻譯為目標 然後,在鏈結過程中將一系列目標檔案合併,並產生最終的可執行程式。在程式中使用glsl著色器的過程與之類似,只不過編譯器和鏈結器都是opengl api的一部分而已。為了簡化...