浏览代码

prevent reset of blendmode when no change

bstouls 7 年之前
父节点
当前提交
f51f4cb053
共有 1 个文件被更改,包括 8 次插入2 次删除
  1. 8 2
      h2d/RenderContext.hx

+ 8 - 2
h2d/RenderContext.hx

@@ -45,6 +45,7 @@ class RenderContext extends h3d.impl.RenderContext {
 	var renderY : Float;
 	var renderY : Float;
 	var renderW : Float;
 	var renderW : Float;
 	var renderH : Float;
 	var renderH : Float;
+	var currentBlend : BlendMode;
 
 
 	public function new(scene) {
 	public function new(scene) {
 		super();
 		super();
@@ -56,6 +57,8 @@ class RenderContext extends h3d.impl.RenderContext {
 		pass = new h3d.mat.Pass("",null);
 		pass = new h3d.mat.Pass("",null);
 		pass.depth(true, Always);
 		pass.depth(true, Always);
 		pass.culling = None;
 		pass.culling = None;
+		currentBlend = Alpha;
+		pass.setBlendMode(currentBlend);
 		baseShader = new h3d.shader.Base2d();
 		baseShader = new h3d.shader.Base2d();
 		baseShader.priority = 100;
 		baseShader.priority = 100;
 		baseShader.zValue = 0.;
 		baseShader.zValue = 0.;
@@ -261,8 +264,11 @@ class RenderContext extends h3d.impl.RenderContext {
 		texture.filter = (currentObj.smooth == null ? defaultSmooth : (currentObj.smooth:Bool)) ? Linear : Nearest;
 		texture.filter = (currentObj.smooth == null ? defaultSmooth : (currentObj.smooth:Bool)) ? Linear : Nearest;
 		texture.wrap = currentObj.tileWrap ? Repeat : Clamp;
 		texture.wrap = currentObj.tileWrap ? Repeat : Clamp;
 		var blend = currentObj.blendMode;
 		var blend = currentObj.blendMode;
-		if( inFilter == currentObj  && blend == Erase ) blend = Add; // add THEN erase
-		pass.setBlendMode(blend);
+		if( inFilter == currentObj && blend == Erase ) blend = Add; // add THEN erase
+		if( blend != currentBlend ) {
+			currentBlend = blend;
+			pass.setBlendMode(blend);
+		}
 		manager.fillParams(buffers, compiledShader, currentShaders);
 		manager.fillParams(buffers, compiledShader, currentShaders);
 		engine.selectMaterial(pass);
 		engine.selectMaterial(pass);
 		engine.uploadShaderBuffers(buffers, Params);
 		engine.uploadShaderBuffers(buffers, Params);