Procházet zdrojové kódy

changed driver.disposeTexture

Nicolas Cannasse před 10 roky
rodič
revize
06cd845100

+ 1 - 1
h3d/impl/Driver.hx

@@ -146,7 +146,7 @@ class Driver {
 		return null;
 	}
 
-	public function disposeTexture( t : Texture ) {
+	public function disposeTexture( t : h3d.mat.Texture ) {
 	}
 
 	public function disposeIndexes( i : IndexBuffer ) {

+ 7 - 4
h3d/impl/GlDriver.hx

@@ -433,10 +433,13 @@ class GlDriver extends Driver {
 		return b;
 	}
 
-	override function disposeTexture( t : Texture ) {
-		gl.deleteTexture(t.t);
-		if( t.rb != null ) gl.deleteRenderbuffer(t.rb);
-		if( t.fb != null ) gl.deleteFramebuffer(t.fb);
+	override function disposeTexture( t : h3d.mat.Texture ) {
+		var tt = t.t;
+		if( tt == null ) return;
+		t.t = null;
+		gl.deleteTexture(tt.t);
+		if( tt.rb != null ) gl.deleteRenderbuffer(tt.rb);
+		if( tt.fb != null ) gl.deleteFramebuffer(tt.fb);
 	}
 
 	override function disposeIndexes( i : IndexBuffer ) {

+ 1 - 1
h3d/impl/LogDriver.hx

@@ -291,7 +291,7 @@ class LogDriver extends Driver {
 		return d.allocVertexes(m);
 	}
 
-	override function disposeTexture( t : Texture ) {
+	override function disposeTexture( t : h3d.mat.Texture ) {
 		log('Dispose texture');
 		d.disposeTexture(t);
 	}

+ 1 - 2
h3d/impl/MemoryManager.hx

@@ -224,8 +224,7 @@ class MemoryManager {
 	@:allow(h3d.mat.Texture.dispose)
 	function deleteTexture( t : h3d.mat.Texture ) {
 		textures.remove(t);
-		driver.disposeTexture(t.t);
-		t.t = null;
+		driver.disposeTexture(t);
 		texMemory -= t.width * t.height * bpp(t);
 	}
 

+ 5 - 2
h3d/impl/Stage3dDriver.hx

@@ -193,8 +193,11 @@ class Stage3dDriver extends Driver {
 		ctx.present();
 	}
 
-	override function disposeTexture( t : Texture ) {
-		t.dispose();
+	override function disposeTexture( t : h3d.mat.Texture ) {
+		if( t.t != null ) {
+			t.t.dispose();
+			t.t = null;
+		}
 	}
 
 	override function allocVertexes( buf : ManagedBuffer ) : VertexBuffer {