Pārlūkot izejas kodu

fix: prevent textures with preventAutoDispose to be disposed (#716)

Rasmus Brinck 5 gadi atpakaļ
vecāks
revīzija
93de260abd
1 mainītis faili ar 18 papildinājumiem un 2 dzēšanām
  1. 18 2
      h3d/mat/Texture.hx

+ 18 - 2
h3d/mat/Texture.hx

@@ -5,6 +5,7 @@ import h3d.mat.Data;
 class Texture {
 
 	static var UID = 0;
+	static final PREVENT_AUTO_DISPOSE = 0x7FFFFFFF;
 
 	/**
 		The default texture color format
@@ -30,7 +31,7 @@ class Texture {
 	public var flags(default, null) : haxe.EnumFlags<TextureFlags>;
 	public var format(default, null) : TextureFormat;
 
-	var lastFrame : Int;
+	var lastFrame(get,set) : Int;
 	var bits : Int;
 	var waitLoads : Array<Void -> Void>;
 	public var mipMap(default,set) : MipMap;
@@ -49,6 +50,21 @@ class Texture {
 		If set to null, depth testing is disabled.
 	**/
 	public var depthBuffer : DepthBuffer;
+	
+	var _lastFrame:Int;
+	
+	function set_lastFrame(lf:Int) {
+		// Make sure we do not override lastFrame of textures set to prevent auto dispose
+		if(_lastFrame != PREVENT_AUTO_DISPOSE) {
+			_lastFrame = lf;
+		}
+		return _lastFrame;
+	}
+
+	function get_lastFrame()
+	{
+		return _lastFrame;
+	}
 
 	public function new(w, h, ?flags : Array<TextureFlags>, ?format : TextureFormat, ?allocPos : h3d.impl.AllocPos ) {
 		#if !noEngine
@@ -131,7 +147,7 @@ class Texture {
 		Calling this will make this texture not considered for auto disposal.
 	**/
 	public function preventAutoDispose() {
-		lastFrame = 0x7FFFFFFF;
+		lastFrame = PREVENT_AUTO_DISPOSE;
 	}
 
 	/**