我在片段着色器下面的代碼:爲什麼下面會拖累片段着色器(Open GL的ES 2.0)的性能
precision lowp float;
varying vec2 v_texCoord;
uniform sampler2D s_texture;
uniform bool color_tint;
uniform float color_tint_amount;
uniform vec4 color_tint_color;
void main(){
float gradDistance;
vec4 texColor, gradColor;
texColor = texture2D(s_texture, v_texCoord);
if (color_tint){
gradColor = color_tint_color;
gradColor.a = texColor.a;
texColor = gradColor * color_tint_amount + texColor * (1.0 - color_tint_amount);
}
gl_FragColor = texColor;
}
的代碼工作正常,但有趣的是,即使所有color_tint
我傳入的是錯誤的,上面的代碼仍然會導致性能嚴重拖累。當與之比較時:
void main(){
float gradDistance;
vec4 texColor, gradColor;
texColor = texture2D(s_texture, v_texCoord);
if (false){
gradColor = color_tint_color;
gradColor.a = texColor.a;
texColor = gradColor * color_tint_amount + texColor * (1.0 - color_tint_amount);
}
gl_FragColor = texColor;
}
哪個後者可以達到40+ fps,而第一個是約18 fps。我加倍檢查,所有在第一個傳遞的color_tint
都是錯誤的,所以塊不應該執行。
順便說一句,我使用GLES20在Android 2.2編程上述。
任何專家都可以知道着色器出了什麼問題嗎?
謝謝。我做了另一個測試,發現分支非常昂貴:甚至比幾個距離()計算還要重。 – xandy 2011-05-05 00:41:31