Browse Source

Merge pull request #2488 from sebavan/DDS

Reduce varyings of 1
sebavan 8 years ago
parent
commit
52599a970e

+ 4 - 0
src/Materials/PBR/babylon.pbrBaseMaterial.ts

@@ -75,6 +75,7 @@
         public REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;
         public REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;
         public INVERTCUBICMAP = false;
         public INVERTCUBICMAP = false;
         public USESPHERICALFROMREFLECTIONMAP = false;
         public USESPHERICALFROMREFLECTIONMAP = false;
+        public USESPHERICALINFRAGMENT = false;
         public REFLECTIONMAP_OPPOSITEZ = false;
         public REFLECTIONMAP_OPPOSITEZ = false;
         public LODINREFLECTIONALPHA = false;
         public LODINREFLECTIONALPHA = false;
         public GAMMAREFLECTION = false;
         public GAMMAREFLECTION = false;
@@ -617,6 +618,9 @@
                         if (reflectionTexture.coordinatesMode !== BABYLON.Texture.SKYBOX_MODE) {
                         if (reflectionTexture.coordinatesMode !== BABYLON.Texture.SKYBOX_MODE) {
                             if (reflectionTexture.sphericalPolynomial) {
                             if (reflectionTexture.sphericalPolynomial) {
                                 defines.USESPHERICALFROMREFLECTIONMAP = true;
                                 defines.USESPHERICALFROMREFLECTIONMAP = true;
+                                if (scene.getEngine().getCaps().maxVaryingVectors <= 8) {
+                                    defines.USESPHERICALINFRAGMENT = true;
+                                }
                             }
                             }
                         }
                         }
                     }
                     }

+ 2 - 2
src/Shaders/pbr.fragment.fx

@@ -31,7 +31,7 @@ varying vec3 vPositionW;
 
 
 #ifdef NORMAL
 #ifdef NORMAL
 	varying vec3 vNormalW;
 	varying vec3 vNormalW;
-	#ifdef USESPHERICALFROMREFLECTIONMAP
+	#if defined(USESPHERICALFROMREFLECTIONMAP) && !defined(USESPHERICALINFRAGMENT)
 		varying vec3 vEnvironmentIrradiance;
 		varying vec3 vEnvironmentIrradiance;
 	#endif
 	#endif
 #endif
 #endif
@@ -560,7 +560,7 @@ void main(void) {
 
 
 	// _____________________________ Irradiance ________________________________
 	// _____________________________ Irradiance ________________________________
 	#ifdef USESPHERICALFROMREFLECTIONMAP
 	#ifdef USESPHERICALFROMREFLECTIONMAP
-		#ifdef NORMAL
+		#if defined(NORMAL) && !defined(USESPHERICALINFRAGMENT)
 			environmentIrradiance = vEnvironmentIrradiance;
 			environmentIrradiance = vEnvironmentIrradiance;
 		#else
 		#else
 			environmentIrradiance = environmentIrradianceJones(reflectionVector);
 			environmentIrradiance = environmentIrradianceJones(reflectionVector);

+ 4 - 4
src/Shaders/pbr.vertex.fx

@@ -67,8 +67,10 @@ varying vec2 vBumpUV;
 varying vec3 vPositionW;
 varying vec3 vPositionW;
 #ifdef NORMAL
 #ifdef NORMAL
     varying vec3 vNormalW;
     varying vec3 vNormalW;
-    #ifdef USESPHERICALFROMREFLECTIONMAP
+    #if defined(USESPHERICALFROMREFLECTIONMAP) && !defined(USESPHERICALINFRAGMENT)
         varying vec3 vEnvironmentIrradiance;
         varying vec3 vEnvironmentIrradiance;
+        
+        #include<harmonicsFunctions>
     #endif
     #endif
 #endif
 #endif
 
 
@@ -94,8 +96,6 @@ varying vec3 vDirectionW;
 
 
 #include<logDepthDeclaration>
 #include<logDepthDeclaration>
 
 
-#include<harmonicsFunctions>
-
 void main(void) {
 void main(void) {
 	vec3 positionUpdated = position;
 	vec3 positionUpdated = position;
 #ifdef NORMAL
 #ifdef NORMAL
@@ -121,7 +121,7 @@ void main(void) {
 
 
 #ifdef NORMAL
 #ifdef NORMAL
     vNormalW = normalize(vec3(finalWorld * vec4(normalUpdated, 0.0)));
     vNormalW = normalize(vec3(finalWorld * vec4(normalUpdated, 0.0)));
-    #ifdef USESPHERICALFROMREFLECTIONMAP
+    #if defined(USESPHERICALFROMREFLECTIONMAP) && !defined(USESPHERICALINFRAGMENT)
         vec3 reflectionVector = vec3(reflectionMatrix * vec4(vNormalW, 0)).xyz;
         vec3 reflectionVector = vec3(reflectionMatrix * vec4(vNormalW, 0)).xyz;
         #ifdef REFLECTIONMAP_OPPOSITEZ
         #ifdef REFLECTIONMAP_OPPOSITEZ
             reflectionVector.z *= -1.0;
             reflectionVector.z *= -1.0;

+ 1 - 0
src/babylon.engine.ts

@@ -2003,6 +2003,7 @@
             context.attachShader(shaderProgram, fragmentShader);
             context.attachShader(shaderProgram, fragmentShader);
 
 
             context.linkProgram(shaderProgram);
             context.linkProgram(shaderProgram);
+            context.validateProgram(shaderProgram);
 
 
             var linked = context.getProgramParameter(shaderProgram, context.LINK_STATUS);
             var linked = context.getProgramParameter(shaderProgram, context.LINK_STATUS);