Can you post your complete shader. Sounds like assuming the distance calc was the slow part was wrong.
sorry for the late reply, out of station. Here is the complete code
--------------------------
VertexShader
--------------------------
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying mediump vec2 v_texCoord;
void main()
{
gl_Position = CC_PMatrix * a_position;
v_texCoord = a_texCoord;
}
--------------------------
PixelShader
--------------------------
precision mediump float;
struct Light
{
mediump vec2 position;
mediump vec3 color;
int isActive;
};
uniform Light lights[15];
varying mediump vec2 v_texCoord;
uniform mediump vec2 u_resolution;
void main()
{
mediump vec4 fragColor = texture2D(CC_Texture0, v_texCoord);
mediump vec3 v_fragmentIntensity = vec3(0.0, 0.0, 0.0);
mediump float lightDist;
mediump float lightDistDivider = 2.0;
mediump vec2 pixelPos = v_texCoord * u_resolution;
if (lights[0].isActive == 1)
{
lightDist = distance(pixelPos, lights[0].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[0].color * lightDist);
}
if (lights[1].isActive == 1)
{
lightDist = distance(pixelPos, lights[1].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[1].color * lightDist);
}
if (lights[2].isActive == 1)
{
lightDist = distance(pixelPos, lights[2].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[2].color * lightDist);
}
if (lights[3].isActive == 1)
{
lightDist = distance(pixelPos, lights[3].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[3].color * lightDist);
}
if (lights[4].isActive == 1)
{
lightDist = distance(pixelPos, lights[4].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[4].color * lightDist);
}
if (lights[5].isActive == 1)
{
lightDist = distance(pixelPos, lights[5].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[5].color * lightDist);
}
if (lights[6].isActive == 1)
{
lightDist = distance(pixelPos, lights[6].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[6].color * lightDist);
}
if (lights[7].isActive == 1)
{
lightDist = distance(pixelPos, lights[7].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[7].color * lightDist);
}
if (lights[8].isActive == 1)
{
lightDist = distance(pixelPos, lights[8].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[8].color * lightDist);
}
if (lights[9].isActive == 1)
{
lightDist = distance(pixelPos, lights[9].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[9].color * lightDist);
}
if (lights[10].isActive == 1)
{
lightDist = distance(pixelPos, lights[10].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[10].color * lightDist);
}
if (lights[11].isActive == 1)
{
lightDist = distance(pixelPos, lights[11].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[11].color * lightDist);
}
if (lights[12].isActive == 1)
{
lightDist = distance(pixelPos, lights[12].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[12].color * lightDist);
}
if (lights[13].isActive == 1)
{
lightDist = distance(pixelPos, lights[13].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[13].color * lightDist);
}
if (lights[14].isActive == 1)
{
lightDist = distance(pixelPos, lights[14].position);
lightDist = lightDistDivider/lightDist;
v_fragmentIntensity = v_fragmentIntensity + (lights[14].color * lightDist);
}
gl_FragColor = vec4(v_fragmentIntensity * fragColor.rgb, 1.0);
}
You have any clue ?