diff options
author | Andy Nichols <andy.nichols@theqtcompany.com> | 2015-12-14 16:09:10 +0100 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2016-01-20 16:23:51 +0000 |
commit | ba467a2c4e44df7934792dfacaa8135c77a010c1 (patch) | |
tree | dd00879b4f042c7d63ae6772d6fd45b0b484d290 | |
parent | 03dc44479b8cfff3946dcb5a16a7f450cbf78ce7 (diff) |
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 <laszlo.agocs@theqtcompany.com>
-rw-r--r-- | src/render/shaders/es2/light.inc.frag100 | 176 |
1 files changed, 1 insertions, 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; } |