summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Nichols <andy.nichols@theqtcompany.com>2015-12-14 16:09:10 +0100
committerLaszlo Agocs <laszlo.agocs@theqtcompany.com>2016-01-20 16:23:51 +0000
commitba467a2c4e44df7934792dfacaa8135c77a010c1 (patch)
treedd00879b4f042c7d63ae6772d6fd45b0b484d290
parent03dc44479b8cfff3946dcb5a16a7f450cbf78ce7 (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.frag100176
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;
}