|
@@ -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;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|