2D lightning from multiple point sources on GLSL ES 2.0 in iPhone
as i'm a complete noob with shaders i've got some problems while trying to get to work a 2D lighting system that basically covers the screen with a 2D black texture with transparent holes where the lighten areas are.
As i'm using only one texture I guess that i must do this in the fragment shader, right?
precision mediump float;
// Texture, coordinates and size
uniform sampler2D u_texture;
varying vec2 v_texCoord;
uniform vec2 textureSize;
uniform int lightCount;
uniform LightSource lights;
float alpha = 1.0;
vec2 pos = vec2(v_texCoord.x * textureSize.x, v_texCoord.y * textureSize.y);
for (i = 0; i < lightCount; i++)
LightSource source = lights[i];
float distance = distance(source.position, pos);
if (distance < source.radius)
alpha -= mix(source.strength, 0.0, distance/source.radius);
gl_FragColor = vec4(0.0, 0.0, 0.0, alpha);
The problem is that the performance is really terrible (cannot run at 60fps with 2 lights and nothing else on screen), any suggestions to make it better or even different ways to approach this problem?
By the way, i'm doing this from cocos2d-x, so if anyone has any idea that uses cocos2d elements it will be welcome as well :)