Browse Source

fix for colorMask changes

ncannasse 7 năm trước cách đây
mục cha
commit
79efd675b9
1 tập tin đã thay đổi với 8 bổ sung4 xóa
  1. 8 4
      h3d/impl/Stage3dDriver.hx

+ 8 - 4
h3d/impl/Stage3dDriver.hx

@@ -82,6 +82,7 @@ class Stage3dDriver extends Driver {
 	var flashVersion : Float;
 	var tdisposed : Texture;
 	var defaultDepth : h3d.mat.DepthBuffer;
+	var curColorMask = -1;
 
 	@:allow(h3d.impl.VertexWrapper)
 	var empty : flash.utils.ByteArray;
@@ -374,6 +375,13 @@ class Stage3dDriver extends Driver {
 
 	override function selectMaterial( pass : Pass ) {
 		selectMaterialBits(@:privateAccess pass.bits);
+
+		if( pass.colorMask != curColorMask ) {
+			var m = pass.colorMask;
+			ctx.setColorMask(m & 1 != 0, m & 2 != 0, m & 4 != 0, m & 8 != 0);
+			curColorMask = m;
+		}
+
 		var s = pass.stencil != null ? pass.stencil : defStencil;
 		@:privateAccess selectStencilBits(s.opBits, s.maskBits);
 	}
@@ -408,10 +416,6 @@ class Stage3dDriver extends Driver {
 			var cmp = Pass.getDepthTest(bits);
 			ctx.setDepthTest(write, COMPARE[cmp]);
 		}
-		if( diff & Pass.colorMask_mask != 0 ) {
-			var m = Pass.getColorMask(bits);
-			ctx.setColorMask(m & 1 != 0, m & 2 != 0, m & 4 != 0, m & 8 != 0);
-		}
 		curMatBits = bits;
 	}