From ba467a2c4e44df7934792dfacaa8135c77a010c1 Mon Sep 17 00:00:00 2001 From: Andy Nichols Date: Mon, 14 Dec 2015 16:09:10 +0100 Subject: GLSL 100 light include uses too many uniforms With the additon of the uniforms for supporting spotlights, now it is only possible to have 2 active lights instead of 4. Change-Id: Ie9d84c85cda204f82f976fb55d8b5fe74ba58687 Reviewed-by: Laszlo Agocs --- src/render/shaders/es2/light.inc.frag100 | 176 +------------------------------ 1 file changed, 1 insertion(+), 175 deletions(-) diff --git a/src/render/shaders/es2/light.inc.frag100 b/src/render/shaders/es2/light.inc.frag100 index 50adedc76..b4988ad82 100644 --- a/src/render/shaders/es2/light.inc.frag100 +++ b/src/render/shaders/es2/light.inc.frag100 @@ -1,4 +1,4 @@ -const int MAX_LIGHTS = 4; +const int MAX_LIGHTS = 2; // RPi: cannot use more than two as we run out of uniforms const int TYPE_POINT = 0; const int TYPE_DIRECTIONAL = 1; const int TYPE_SPOT = 2; @@ -87,70 +87,6 @@ void adsModelNormalMapped(const in FP vec3 vpos, const in FP vec3 vnormal, const diffuseColor += att * lights[1].intensity * diffuse * lights[1].color; specularColor += att * specular; - - // 2 - if (lightCount < 3) - return; - att = 1.0; - if ( lights[2].type != TYPE_DIRECTIONAL ) { - s = tangentMatrix * ( lights[2].position - vpos ); - if (length( lights[2].attenuation ) != 0.0) { - FP float dist = length(s); - att = 1.0 / (lights[2].attenuation.x + lights[2].attenuation.y * dist + lights[2].attenuation.z * dist * dist); - } - s = normalize( s ); - if ( lights[2].type == TYPE_SPOT ) { - if ( degrees(acos(dot(-s, normalize(lights[2].direction))) ) > lights[2].cutOffAngle) - att = 0.0; - } - } else { - s = normalize( tangentMatrix * -lights[2].direction ); - } - - diffuse = max( dot( s, n ), 0.0 ); - - specular = 0.0; - if (diffuse > 0.0 && shininess > 0.0 && att > 0.0) { - FP vec3 r = reflect( -s, n ); - FP vec3 v = normalize( tangentMatrix * ( eye - vpos ) ); - FP float normFactor = ( shininess + 2.0 ) / 2.0; - specular = normFactor * pow( max( dot( r, v ), 0.0 ), shininess ); - } - - diffuseColor += att * lights[2].intensity * diffuse * lights[2].color; - specularColor += att * specular; - - // 3 - if (lightCount < 4) - return; - att = 1.0; - if ( lights[3].type != TYPE_DIRECTIONAL ) { - s = tangentMatrix * ( lights[3].position - vpos ); - if (length( lights[3].attenuation ) != 0.0) { - FP float dist = length(s); - att = 1.0 / (lights[3].attenuation.x + lights[3].attenuation.y * dist + lights[3].attenuation.z * dist * dist); - } - s = normalize( s ); - if ( lights[3].type == TYPE_SPOT ) { - if ( degrees(acos(dot(-s, normalize(lights[3].direction))) ) > lights[3].cutOffAngle) - att = 0.0; - } - } else { - s = normalize( tangentMatrix * -lights[3].direction ); - } - - diffuse = max( dot( s, n ), 0.0 ); - - specular = 0.0; - if (diffuse > 0.0 && shininess > 0.0 && att > 0.0) { - FP vec3 r = reflect( -s, n ); - FP vec3 v = normalize( tangentMatrix * ( eye - vpos ) ); - FP float normFactor = ( shininess + 2.0 ) / 2.0; - specular = normFactor * pow( max( dot( r, v ), 0.0 ), shininess ); - } - - diffuseColor += att * lights[3].intensity * diffuse * lights[3].color; - specularColor += att * specular; } void adsModel(const in FP vec3 vpos, const in FP vec3 vnormal, const in FP vec3 eye, const in FP float shininess, @@ -225,70 +161,6 @@ void adsModel(const in FP vec3 vpos, const in FP vec3 vnormal, const in FP vec3 diffuseColor += att * lights[1].intensity * diffuse * lights[1].color; specularColor += att * specular; - - // 2 - if (lightCount < 3) - return; - att = 1.0; - if ( lights[2].type != TYPE_DIRECTIONAL ) { - s = lights[2].position - vpos; - if (length( lights[2].attenuation ) != 0.0) { - FP float dist = length(s); - att = 1.0 / (lights[2].attenuation.x + lights[2].attenuation.y * dist + lights[2].attenuation.z * dist * dist); - } - s = normalize( s ); - if ( lights[2].type == TYPE_SPOT ) { - if ( degrees(acos(dot(-s, normalize(lights[2].direction))) ) > lights[2].cutOffAngle) - att = 0.0; - } - } else { - s = normalize( -lights[2].direction ); - } - - diffuse = max( dot( s, n ), 0.0 ); - - specular = 0.0; - if (diffuse > 0.0 && shininess > 0.0 && att > 0.0) { - FP vec3 r = reflect( -s, n ); - FP vec3 v = normalize( eye - vpos ); - FP float normFactor = ( shininess + 2.0 ) / 2.0; - specular = normFactor * pow( max( dot( r, v ), 0.0 ), shininess ); - } - - diffuseColor += att * lights[2].intensity * diffuse * lights[2].color; - specularColor += att * specular; - - // 3 - if (lightCount < 4) - return; - att = 1.0; - if ( lights[3].type != TYPE_DIRECTIONAL ) { - s = lights[3].position - vpos; - if (length( lights[3].attenuation ) != 0.0) { - FP float dist = length(s); - att = 1.0 / (lights[3].attenuation.x + lights[3].attenuation.y * dist + lights[3].attenuation.z * dist * dist); - } - s = normalize( s ); - if ( lights[3].type == TYPE_SPOT ) { - if ( degrees(acos(dot(-s, normalize(lights[3].direction))) ) > lights[3].cutOffAngle) - att = 0.0; - } - } else { - s = normalize( -lights[3].direction ); - } - - diffuse = max( dot( s, n ), 0.0 ); - - specular = 0.0; - if (diffuse > 0.0 && shininess > 0.0 && att > 0.0) { - FP vec3 r = reflect( -s, n ); - FP vec3 v = normalize( eye - vpos ); - FP float normFactor = ( shininess + 2.0 ) / 2.0; - specular = normFactor * pow( max( dot( r, v ), 0.0 ), shininess ); - } - - diffuseColor += att * lights[3].intensity * diffuse * lights[3].color; - specularColor += att * specular; } void adModel(const in FP vec3 vpos, const in FP vec3 vnormal, out FP vec3 diffuseColor) @@ -343,50 +215,4 @@ void adModel(const in FP vec3 vpos, const in FP vec3 vnormal, out FP vec3 diffus diffuse = max( dot( s, n ), 0.0 ); diffuseColor += att * lights[1].intensity * diffuse * lights[1].color; - - // 2 - if (lightCount < 3) - return; - att = 1.0; - if ( lights[2].type != TYPE_DIRECTIONAL ) { - s = lights[2].position - vpos; - if (length( lights[2].attenuation ) != 0.0) { - FP float dist = length(s); - att = 1.0 / (lights[2].attenuation.x + lights[2].attenuation.y * dist + lights[2].attenuation.z * dist * dist); - } - s = normalize( s ); - if ( lights[2].type == TYPE_SPOT ) { - if ( degrees(acos(dot(-s, normalize(lights[2].direction))) ) > lights[2].cutOffAngle) - att = 0.0; - } - } else { - s = normalize( -lights[2].direction ); - } - - diffuse = max( dot( s, n ), 0.0 ); - - diffuseColor += att * lights[2].intensity * diffuse * lights[2].color; - - // 3 - if (lightCount < 4) - return; - att = 1.0; - if ( lights[3].type != TYPE_DIRECTIONAL ) { - s = lights[3].position - vpos; - if (length( lights[3].attenuation ) != 0.0) { - FP float dist = length(s); - att = 1.0 / (lights[3].attenuation.x + lights[3].attenuation.y * dist + lights[3].attenuation.z * dist * dist); - } - s = normalize( s ); - if ( lights[3].type == TYPE_SPOT ) { - if ( degrees(acos(dot(-s, normalize(lights[3].direction))) ) > lights[3].cutOffAngle) - att = 0.0; - } - } else { - s = normalize( -lights[3].direction ); - } - - diffuse = max( dot( s, n ), 0.0 ); - - diffuseColor += att * lights[3].intensity * diffuse * lights[3].color; } -- cgit v1.2.3