Przeglądaj źródła

added Screen blendmode

ncannasse 11 lat temu
rodzic
commit
a457968103
4 zmienionych plików z 14 dodań i 0 usunięć
  1. 1 0
      h2d/BlendMode.hx
  2. 2 0
      h2d/RenderContext.hx
  3. 4 0
      h3d/mat/MeshMaterial.hx
  4. 7 0
      hxd/BitmapData.hx

+ 1 - 0
h2d/BlendMode.hx

@@ -7,4 +7,5 @@ enum BlendMode {
 	SoftAdd;
 	SoftAdd;
 	Multiply;
 	Multiply;
 	Erase;
 	Erase;
+	Screen;
 }
 }

+ 2 - 0
h2d/RenderContext.hx

@@ -106,6 +106,8 @@ class RenderContext {
 			pass.blend(DstColor, OneMinusSrcAlpha);
 			pass.blend(DstColor, OneMinusSrcAlpha);
 		case Erase:
 		case Erase:
 			pass.blend(Zero, OneMinusSrcAlpha);
 			pass.blend(Zero, OneMinusSrcAlpha);
+		case Screen:
+			pass.blend(One, OneMinusSrcColor);
 		}
 		}
 		manager.fillParams(buffers, compiledShader, currentShaders);
 		manager.fillParams(buffers, compiledShader, currentShaders);
 		engine.selectMaterial(pass);
 		engine.selectMaterial(pass);

+ 4 - 0
h3d/mat/MeshMaterial.hx

@@ -60,6 +60,10 @@ class MeshMaterial extends Material {
 				mainPass.depthWrite = false;
 				mainPass.depthWrite = false;
 				mainPass.blend(Zero, OneMinusSrcAlpha);
 				mainPass.blend(Zero, OneMinusSrcAlpha);
 				mainPass.setPassName("additive");
 				mainPass.setPassName("additive");
+			case Screen:
+				mainPass.depthWrite = false;
+				mainPass.blend(One, OneMinusSrcColor);
+				mainPass.setPassName("additive");
 			}
 			}
 		}
 		}
 		return blendMode = v;
 		return blendMode = v;

+ 7 - 0
hxd/BitmapData.hx

@@ -93,6 +93,13 @@ abstract BitmapData(InnerData) {
 			r.x = x;
 			r.x = x;
 			r.y = y;
 			r.y = y;
 			this.draw(src.toNative(), m, null, flash.display.BlendMode.MULTIPLY, r, false);
 			this.draw(src.toNative(), m, null, flash.display.BlendMode.MULTIPLY, r, false);
+		case Screen:
+			var m = tmpMatrix;
+			m.tx = x - srcX;
+			m.ty = y - srcY;
+			r.x = x;
+			r.y = y;
+			this.draw(src.toNative(), m, null, flash.display.BlendMode.SCREEN, r, false);
 		case SoftAdd:
 		case SoftAdd:
 			throw "BlendMode not supported";
 			throw "BlendMode not supported";
 		}
 		}