|
@@ -18,8 +18,8 @@ class MRTSubPass extends Default {
|
|
|
return [mrt.fragmentOutputs[output]];
|
|
|
}
|
|
|
|
|
|
- override function getTexture( index = 0 ) {
|
|
|
- return index == 0 ? mrt.getTexture(output) : null;
|
|
|
+ public function getTexture() {
|
|
|
+ return mrt.textures[output];
|
|
|
}
|
|
|
|
|
|
override function draw( passes ) {
|
|
@@ -41,6 +41,7 @@ class MRT extends Default {
|
|
|
|
|
|
var fragmentOutputs : Array<hxsl.Output>;
|
|
|
var outputNames : Array<String>;
|
|
|
+ var textures : Array<h3d.mat.Texture>;
|
|
|
public var clearColors : Array<Null<Int>>;
|
|
|
public var clearSameColor : Null<Int>;
|
|
|
public var clearDepth : Null<Float>;
|
|
@@ -70,18 +71,25 @@ class MRT extends Default {
|
|
|
return fragmentOutputs;
|
|
|
}
|
|
|
|
|
|
+ public function getTexture( index : Int ) {
|
|
|
+ return textures[index];
|
|
|
+ }
|
|
|
+
|
|
|
override function draw(passes:Object) {
|
|
|
- var tex = [for( i in 0...fragmentOutputs.length ) tcache.allocTarget(outputNames[i], ctx, ctx.engine.width, ctx.engine.height, true)];
|
|
|
+ if( textures == null )
|
|
|
+ textures = [];
|
|
|
+ for( i in 0...fragmentOutputs.length )
|
|
|
+ textures[i] = ctx.textures.allocTarget(outputNames[i], ctx.engine.width, ctx.engine.height, true);
|
|
|
if( clearColors != null )
|
|
|
for( i in 0...fragmentOutputs.length ) {
|
|
|
var color = clearColors[i];
|
|
|
if( color != null ) {
|
|
|
- ctx.engine.pushTarget(tex[i]);
|
|
|
+ ctx.engine.pushTarget(textures[i]);
|
|
|
ctx.engine.clear(color);
|
|
|
ctx.engine.popTarget();
|
|
|
}
|
|
|
}
|
|
|
- ctx.engine.pushTargets(tex);
|
|
|
+ ctx.engine.pushTargets(textures);
|
|
|
if( clearDepth != null || clearSameColor != null )
|
|
|
ctx.engine.clear(clearSameColor, clearDepth);
|
|
|
passes = super.draw(passes);
|