溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

自動Shader優(yōu)化器glsl_optimizer的編譯與使用

發(fā)布時間:2020-06-30 21:02:13 來源:網(wǎng)絡(luò) 閱讀:8584 作者:老G 欄目:開發(fā)技術(shù)

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) 

自動Shader優(yōu)化器glsl_optimizer的編譯與使用


工具作者只提供了一個測試用例和lib的編譯target,沒有提供命令行工具的target。

好在SIO2作者提供了一套命令行工具代碼。我從SDK中扒出來,放到項目里即可。這樣我們就能用上最新版本的glsl_optimizer了。

首先復(fù)制名為glsl_optimizer_tests的target,并重命名為glsl_optimizer_bin。

自動Shader優(yōu)化器glsl_optimizer的編譯與使用


然后在當(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)化之后的控制臺顯示為: 

自動Shader優(yōu)化器glsl_optimizer的編譯與使用

然后將優(yōu)化后的腳本復(fù)制回項目。編譯運行即可看到FPS有一定程度的提升。項目越大shader腳本越多,越復(fù)雜,優(yōu)化效果越明顯。

我簡單測試一下繪制200個四千多面模型,在iPad mini2上

優(yōu)化前的效果: 

自動Shader優(yōu)化器glsl_optimizer的編譯與使用

優(yōu)化后的效果:

自動Shader優(yōu)化器glsl_optimizer的編譯與使用

附件:http://down.51cto.com/data/2364780
向AI問一下細(xì)節(jié)

免責(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)容。

AI