Parcourir la source

added drawImmediate/getSubPass

ncannasse il y a 9 ans
Parent
commit
578034d7b6
1 fichiers modifiés avec 41 ajouts et 0 suppressions
  1. 41 0
      h3d/pass/MRT.hx

+ 41 - 0
h3d/pass/MRT.hx

@@ -1,5 +1,38 @@
 package h3d.pass;
 
+@:access(h3d.pass.MRT)
+class MRTSubPass extends Default {
+
+	var mrt : MRT;
+	var output : Int;
+	var varId : Int;
+
+	public function new( m, output ) {
+		this.mrt = m;
+		this.output = output;
+		super();
+		this.varId = hxsl.Globals.allocID(mrt.fragmentOutputs[output] + "Map");
+	}
+
+	override function getOutputs() {
+		return ["output.position", "output."+mrt.fragmentOutputs[output]];
+	}
+
+	override function getTexture( index = 0 ) {
+		return index == 0 ? mrt.getTexture(output) : null;
+	}
+
+	override function draw( passes ) {
+		var texture = mrt.getTexture(output);
+		ctx.engine.pushTarget(texture);
+		passes = super.draw(passes);
+		ctx.engine.popTarget();
+		ctx.setGlobalID(varId, texture);
+		return passes;
+	}
+
+}
+
 class MRT extends Default {
 
 	var fragmentOutputs : Array<String>;
@@ -41,4 +74,12 @@ class MRT extends Default {
 		return passes;
 	}
 
+	public function getSubPass( output : Int ) {
+		return new MRTSubPass(this, output);
+	}
+
+	public function drawImmediate( passes : Object ) {
+		return super.draw(passes);
+	}
+
 }