フラグメントシェーダーに次のコードがあります。
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
コードは正常に機能しますが、渡したものがすべてfalseであっても、上記のコードによってパフォーマンスが大幅に低下するのは興味深いことです。比較する場合:
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を達成できますが、最初のものは約18fpsです。私はダブルチェックcolor_tint
しましたが、最初に渡されたものはすべてfalseであるため、ブロックは実行されません。
ところで、私はGLES20を使用してAndroid2.2で上記をプログラミングしています。
シェーダーの何が問題になっているのか、専門家は知っていますか?