Parcourir la source

added dispose() on passes

ncannasse il y a 11 ans
Parent
commit
f2a7575a6c
6 fichiers modifiés avec 36 ajouts et 5 suppressions
  1. 3 0
      h3d/pass/Base.hx
  2. 1 0
      h3d/pass/Border.hx
  3. 8 0
      h3d/pass/Default.hx
  4. 13 5
      h3d/pass/ShadowMap.hx
  5. 4 0
      h3d/pass/SubPass.hx
  6. 7 0
      h3d/scene/Scene.hx

+ 3 - 0
h3d/pass/Base.hx

@@ -18,6 +18,9 @@ class Base {
 		this.ctx = ctx;
 	}
 
+	public function dispose() {
+	}
+
 	public function draw( name : String, passes : Object ) {
 		return passes;
 	}

+ 1 - 0
h3d/pass/Border.hx

@@ -58,6 +58,7 @@ class Border extends ScreenFx<BorderShader> {
 		var plan = new h3d.prim.RawPrimitive(engine, bbuf, 2);
 		plan.buffer.flags.unset(Triangles);
 		plan.buffer.flags.set(Quads);
+		this.plan.dispose();
 		this.plan = plan;
 		shader.color.set(1,1,1,1);
 	}

+ 8 - 0
h3d/pass/Default.hx

@@ -43,6 +43,14 @@ class Default extends Base {
 		fullClearRequired = engine.driver.hasFeature(FullClearRequired);
 	}
 
+	override function dispose() {
+		super.dispose();
+		for( t in textureCache )
+			t.dispose();
+		textureCache = [];
+		textureCacheFrame = -1;
+	}
+
 	function getOutputs() {
 		return ["output.position", "output.color"];
 	}

+ 13 - 5
h3d/pass/ShadowMap.hx

@@ -8,8 +8,7 @@ class ShadowMap extends Default {
 	var shadowColorId : Int;
 	var shadowPowerId : Int;
 	var shadowBiasId : Int;
-	var border : Border;
-
+	public var border : Border;
 	public var size(default,set) : Int;
 	public var lightDirection : h3d.Vector;
 	public var color : h3d.Vector;
@@ -32,14 +31,23 @@ class ShadowMap extends Default {
 		shadowBiasId = hxsl.Globals.allocID("shadow.bias");
 		color = new h3d.Vector();
 		blur = new Blur(2, 3);
+		border = new Border(size, size);
 	}
 
 	function set_size(s) {
-		if( border != null ) border.dispose();
-		border = new Border(s, s);
+		if( border != null ) {
+			border.dispose();
+			border = new Border(s, s);
+		}
 		return size = s;
 	}
 
+	override function dispose() {
+		super.dispose();
+		blur.dispose();
+		if( border != null ) border.dispose();
+	}
+
 	public dynamic function getSceneBounds( bounds : h3d.col.Bounds ) {
 		bounds.xMin = -10;
 		bounds.yMin = -10;
@@ -73,7 +81,7 @@ class ShadowMap extends Default {
 		ctx.engine.setTarget(texture);
 		ctx.engine.clear(0xFFFFFF, 1, fullClearRequired ? 0 : null);
 		passes = super.draw(name, passes);
-		border.render();
+		if( border != null ) border.render();
 		ctx.engine.setTarget(null);
 
 		if( blur.quality > 0 )

+ 4 - 0
h3d/pass/SubPass.hx

@@ -27,4 +27,8 @@ class SubPass extends Base {
 		return sub.getLightSystem();
 	}
 
+	override function dispose() {
+		sub.dispose();
+	}
+
 }

+ 7 - 0
h3d/scene/Scene.hx

@@ -25,6 +25,13 @@ class Scene extends Object implements h3d.IDrawable {
 		return s;
 	}
 
+	override function dispose() {
+		super.dispose();
+		for( p in passes )
+			p.dispose();
+		passes = new Map();
+	}
+
 	/**
 	 allow to customize render passes (for example, branch sub scene or 2d context)
 	 */