Jump to content

  • Log In with Google      Sign In   
  • Create Account


XavierArias

Member Since 05 Sep 2012
Offline Last Active Sep 21 2012 11:37 AM

Topics I've Started

2D lighting from multiple point sources on GLSL ES 2.0 in iPhone

05 September 2012 - 11:02 AM

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?
Fragment shader:
[source lang="cpp"] #ifdef GL_ES precision mediump float; #endif // Texture, coordinates and size uniform sampler2D u_texture; varying vec2 v_texCoord; uniform vec2 textureSize; uniform int lightCount; struct LightSource { vec2 position; float radius; float strength; }; uniform LightSource lights[10]; void main() { float alpha = 1.0; vec2 pos = vec2(v_texCoord.x * textureSize.x, v_texCoord.y * textureSize.y); int i; 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); }[/source]
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 Posted Image

PARTNERS