要使用著色器對影象進行渲染則需要將著色器內容載入並編譯
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的一部分而已。為了簡化...