您好,登錄后才能下訂單哦!
glsl_optimizer是一個免費開源的glsl優(yōu)化器??梢陨蒅PU無關(guān)的shader優(yōu)化代碼??梢赃M(jìn)行非常多的優(yōu)化項目,比如函數(shù)內(nèi)連,死代碼刪除,常量折疊,常量傳遞,數(shù)學(xué)優(yōu)化等等。
GitHub地址為:
https://github.com/aras-p/glsl-optimizer
我們首先需要編譯命令行工具。該工具同時支持VS和XCode工程。但是打開工程我們發(fā)現(xiàn)
工具作者只提供了一個測試用例和lib的編譯target,沒有提供命令行工具的target。
好在SIO2作者提供了一套命令行工具代碼。我從SDK中扒出來,放到項目里即可。這樣我們就能用上最新版本的glsl_optimizer了。
首先復(fù)制名為glsl_optimizer_tests的target,并重命名為glsl_optimizer_bin。
然后在當(dāng)前target中,打入代碼文件main.cpp(文件已上傳到附件),并移除代碼文件glsl_optimizer_tests.cpp的引用。
然后我們要在main.cpp中設(shè)置一下要優(yōu)化的glsl版本。
//TODO 請?zhí)顚懩阋獌?yōu)化的glsl版本 ctx = glslopt_initialize( kGlslTargetOpenGLES20 );
支持如下參數(shù):
// Optimizer target language enum glslopt_target { kGlslTargetOpenGL = 0, kGlslTargetOpenGLES20 = 1, kGlslTargetOpenGLES30 = 2 };
然后我們就可以編譯了。
編譯完成后,我們找到生成的二進(jìn)制程序。將其和待優(yōu)化的glsl腳本復(fù)制到合適位置。
然后使用命令行:
./glsl_optimizer_bin -in vertex.glsl -out vertex.glsl -profile GL_VERTEX_SHADER ./glsl_optimizer_bin -in fragment.glsl -out fragment.glsl -profile GL_FRAGMENT_SHADER
來調(diào)用工具優(yōu)化shader,該命令非常好懂,不再贅述。
優(yōu)化之后的控制臺顯示為:
然后將優(yōu)化后的腳本復(fù)制回項目。編譯運行即可看到FPS有一定程度的提升。項目越大shader腳本越多,越復(fù)雜,優(yōu)化效果越明顯。
我簡單測試一下繪制200個四千多面模型,在iPad mini2上
優(yōu)化前的效果:
優(yōu)化后的效果:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。