Browse Source

[RENDERER][LIGHTING] Allowing additional lighting shaders.

clandrin 3 years ago
parent
commit
02f8d83421
2 changed files with 11 additions and 2 deletions
  1. 4 2
      h3d/scene/pbr/LightSystem.hx
  2. 7 0
      h3d/scene/pbr/Renderer.hx

+ 4 - 2
h3d/scene/pbr/LightSystem.hx

@@ -5,6 +5,7 @@ class LightSystem extends h3d.scene.LightSystem {
 
 	public var lightBuffer : h3d.scene.pbr.LightBuffer;
 	public var forwardMode = false;
+	public var lightingShaders : Array<hxsl.Shader> = [];
 
 	public function new() {
 		super();
@@ -17,8 +18,9 @@ class LightSystem extends h3d.scene.LightSystem {
 			shaders = ctx.allocShaderList(light.shader, shaders);
 			if( light.shadows.shader != null && light.shadows.mode != None )
 				shaders = ctx.allocShaderList(light.shadows.shader, shaders);
-		}
-		else if( forwardMode ) {
+			for( s in lightingShaders )
+				shaders = ctx.allocShaderList(s, shaders);
+		} else if( forwardMode ) {
 			var found = false;
             for( s in shaders ) {
                 var forward = Std.downcast(s, h3d.shader.pbr.DefaultForward);

+ 7 - 0
h3d/scene/pbr/Renderer.hx

@@ -207,6 +207,13 @@ class Renderer extends h3d.scene.Renderer {
 		if( ctx.lightSystem != null ) ctx.lightSystem.drawPasses = ctx.engine.drawCalls - count;
 		end();
 
+		var pbrLightSystem : h3d.scene.pbr.LightSystem = cast ctx.lightSystem;
+		if (pbrLightSystem != null) {
+			while (pbrLightSystem.lightingShaders.length != 0) {
+				pbrLightSystem.lightingShaders.pop();
+			}
+		}
+
 		begin(Lighting);
 		var lpass = screenLightPass;
 		if( lpass == null ) {