Quellcode durchsuchen

add Scene.setOutputTarget

trethaller vor 2 Jahren
Ursprung
Commit
6b6389653b
1 geänderte Dateien mit 27 neuen und 0 gelöschten Zeilen
  1. 27 0
      h3d/scene/Scene.hx

+ 27 - 0
h3d/scene/Scene.hx

@@ -458,4 +458,31 @@ class Scene extends Object implements h3d.IDrawable implements hxd.SceneEvents.I
 		}
 	}
 
+	var prevDB : h3d.mat.DepthBuffer;
+	var prevEngine = null;
+	/** 
+		Temporarily overrides the output render target. This is useful for picture-in-picture rendering,
+		where the output render target has a different size from the window. 
+		`tex` must have a matching depthBuffer attached.
+		Call `setOutputTarget()` after `render()` has been called.
+	**/
+	public function setOutputTarget( ?engine: h3d.Engine, ?tex : h3d.mat.Texture ) @:privateAccess {
+		if(tex != null) {
+			if(prevDB != null) throw "missing setOutputTarget()";
+			engine.pushTarget(tex);
+			engine.width = tex.width;
+			engine.height = tex.height;
+			prevDB = ctx.textures.defaultDepthBuffer;
+			prevEngine = engine;
+			ctx.textures.defaultDepthBuffer = tex.depthBuffer;
+		}
+		else {
+			prevEngine.popTarget();
+			prevEngine.width = prevDB.width;
+			prevEngine.height = prevDB.height;
+			ctx.textures.defaultDepthBuffer = prevDB;
+			prevDB = null;
+			prevEngine = null;
+		}
+	}
 }