Opengl es GLSLE损失5-6ms,使用均匀浮动代替例如0.5

Opengl es GLSLE损失5-6ms,使用均匀浮动代替例如0.5,opengl-es,cocos2d-iphone,fragment-shader,vertex-shader,glsles,Opengl Es,Cocos2d Iphone,Fragment Shader,Vertex Shader,Glsles,我有这个碎片着色器。在一些“精灵”上,我想要不同的纹理“饱和度”。目前我只设定了一次,但后来我会根据绘制的精灵设置每次绘制。正如代码中提到的,如果我只写*0.5,我看不到性能下降,但是如果我使用*u_测试,速度会下降5-7毫秒。这可能吗?你能想出另一个解决办法吗?我完全走错路了吗 varying vec4 v_fragmentColor; varying vec2 v_texCoord; varying vec4 v_secondFragmentCol

我有这个碎片着色器。在一些“精灵”上,我想要不同的纹理“饱和度”。目前我只设定了一次,但后来我会根据绘制的精灵设置每次绘制。正如代码中提到的,如果我只写*0.5,我看不到性能下降,但是如果我使用*u_测试,速度会下降5-7毫秒。这可能吗?你能想出另一个解决办法吗?我完全走错路了吗

varying vec4        v_fragmentColor; 
varying vec2        v_texCoord;
varying vec4        v_secondFragmentColor;

uniform sampler2D   CC_Texture0;

uniform vec3        u_topColor;
uniform vec3        u_centerColor;
uniform vec3        u_bottomColor;
uniform float       u_intensity;
uniform lowp float  u_test;

void main()
{
    //vec4 base = texture2D(CC_Texture0, v_texCoord) * v_fragmentColor * u_test;    // 1. 5-7 ms slower that 2.
    vec4 base = texture2D(CC_Texture0, v_texCoord) * v_fragmentColor * 0.5;         // 2. fast

    vec3 blend = v_secondFragmentColor.rgb;

    vec3 overlay = vec3( 2.0 * base.rgb * blend + base.rgb * base.rgb - 2.0 * base.rgb * base.rgb * blend);

    gl_FragColor = vec4(overlay, base.a);
}

你如何测量5-7毫秒?相对于什么?5-7分钟?我在设备(iPad视网膜)上运行了大约25个精灵的场景,交换了第1行。2.你能不能把
u_test
移到顶点着色器中,然后预乘
v_fragmentColor
?你有没有包括设置制服所花的时间?