Procházet zdrojové kódy

Don't declare in the vertex shader samplers used in lighting code

Popov72 před 4 roky
rodič
revize
b72619ee9c

+ 2 - 2
src/Materials/Node/Blocks/Dual/lightBlock.ts

@@ -201,7 +201,7 @@ export class LightBlock extends NodeMaterialBlock {
 
         // Declaration
         if (!this.light) { // Emit for all lights
-            state._emitFunctionFromInclude(state.supportUniformBuffers ? "lightUboDeclaration" : "lightFragmentDeclaration", comments, {
+            state._emitFunctionFromInclude(state.supportUniformBuffers ? "lightVxUboDeclaration" : "lightVxFragmentDeclaration", comments, {
                 repeatKey: "maxSimultaneousLights"
             });
             this._lightId = 0;
@@ -212,7 +212,7 @@ export class LightBlock extends NodeMaterialBlock {
             this._lightId = (state.counters["lightCounter"] !== undefined ? state.counters["lightCounter"] : -1) + 1;
             state.counters["lightCounter"] = this._lightId;
 
-            state._emitFunctionFromInclude(state.supportUniformBuffers ? "lightUboDeclaration" : "lightFragmentDeclaration", comments, {
+            state._emitFunctionFromInclude(state.supportUniformBuffers ? "lightVxUboDeclaration" : "lightVxFragmentDeclaration", comments, {
                 replaceStrings: [{ search: /{X}/g, replace: this._lightId.toString() }]
             }, this._lightId.toString());
         }

+ 2 - 2
src/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.ts

@@ -721,7 +721,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
 
         // Declaration
         if (!this.light) { // Emit for all lights
-            state._emitFunctionFromInclude(state.supportUniformBuffers ? "lightUboDeclaration" : "lightFragmentDeclaration", comments, {
+            state._emitFunctionFromInclude(state.supportUniformBuffers ? "lightVxUboDeclaration" : "lightVxFragmentDeclaration", comments, {
                 repeatKey: "maxSimultaneousLights"
             });
             this._lightId = 0;
@@ -731,7 +731,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
             this._lightId = (state.counters["lightCounter"] !== undefined ? state.counters["lightCounter"] : -1) + 1;
             state.counters["lightCounter"] = this._lightId;
 
-            state._emitFunctionFromInclude(state.supportUniformBuffers ? "lightUboDeclaration" : "lightFragmentDeclaration", comments, {
+            state._emitFunctionFromInclude(state.supportUniformBuffers ? "lightVxUboDeclaration" : "lightVxFragmentDeclaration", comments, {
                 replaceStrings: [{ search: /{X}/g, replace: this._lightId.toString() }]
             }, this._lightId.toString());
         }

+ 35 - 0
src/Shaders/ShadersInclude/lightVxFragmentDeclaration.fx

@@ -0,0 +1,35 @@
+#ifdef LIGHT{X}
+	uniform vec4 vLightData{X};
+	uniform vec4 vLightDiffuse{X};
+
+	#ifdef SPECULARTERM
+		uniform vec4 vLightSpecular{X};
+	#else
+		vec4 vLightSpecular{X} = vec4(0.);
+	#endif
+	#ifdef SHADOW{X}
+        #ifdef SHADOWCSM{X}
+            uniform mat4 lightMatrix{X}[SHADOWCSMNUM_CASCADES{X}];
+
+            varying vec4 vPositionFromLight{X}[SHADOWCSMNUM_CASCADES{X}];
+            varying float vDepthMetric{X}[SHADOWCSMNUM_CASCADES{X}];
+            varying vec4 vPositionFromCamera{X};
+        #elif defined(SHADOWCUBE{X})
+		#else
+			varying vec4 vPositionFromLight{X};
+			varying float vDepthMetric{X};
+
+			uniform mat4 lightMatrix{X};
+		#endif
+		uniform vec4 shadowsInfo{X};
+		uniform vec2 depthValues{X};
+	#endif
+	#ifdef SPOTLIGHT{X}
+		uniform vec4 vLightDirection{X};
+		uniform vec4 vLightFalloff{X};
+	#elif defined(POINTLIGHT{X})
+		uniform vec4 vLightFalloff{X};
+	#elif defined(HEMILIGHT{X})
+		uniform vec3 vLightGround{X};
+	#endif
+#endif

+ 35 - 0
src/Shaders/ShadersInclude/lightVxUboDeclaration.fx

@@ -0,0 +1,35 @@
+#ifdef LIGHT{X}
+	uniform Light{X}
+	{
+		vec4 vLightData;
+
+		vec4 vLightDiffuse;
+		vec4 vLightSpecular;
+		#ifdef SPOTLIGHT{X}
+			vec4 vLightDirection;
+			vec4 vLightFalloff;
+		#elif defined(POINTLIGHT{X})
+			vec4 vLightFalloff;
+		#elif defined(HEMILIGHT{X})
+			vec3 vLightGround;
+		#endif
+		vec4 shadowsInfo;
+		vec2 depthValues;
+	} light{X};
+#ifdef SHADOW{X}
+	#ifdef SHADOWCSM{X}
+		uniform mat4 lightMatrix{X}[SHADOWCSMNUM_CASCADES{X}];
+
+		varying vec4 vPositionFromLight{X}[SHADOWCSMNUM_CASCADES{X}];
+		varying float vDepthMetric{X}[SHADOWCSMNUM_CASCADES{X}];
+		varying vec4 vPositionFromCamera{X};
+	#elif defined(SHADOWCUBE{X})
+	#else
+		varying vec4 vPositionFromLight{X};
+		varying float vDepthMetric{X};
+
+		uniform mat4 lightMatrix{X};
+	#endif
+#endif
+
+#endif

+ 1 - 1
src/Shaders/default.vertex.fx

@@ -90,7 +90,7 @@ varying vec4 vColor;
 #include<clipPlaneVertexDeclaration>
 
 #include<fogVertexDeclaration>
-#include<__decl__lightFragment>[0..maxSimultaneousLights]
+#include<__decl__lightVxFragment>[0..maxSimultaneousLights]
 
 #include<morphTargetsVertexGlobalDeclaration>
 #include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]

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

@@ -135,7 +135,7 @@ varying vec4 vColor;
 #include<bumpVertexDeclaration>
 #include<clipPlaneVertexDeclaration>
 #include<fogVertexDeclaration>
-#include<__decl__lightFragment>[0..maxSimultaneousLights]
+#include<__decl__lightVxFragment>[0..maxSimultaneousLights]
 
 #include<morphTargetsVertexGlobalDeclaration>
 #include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]