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