|
@@ -3,11 +3,15 @@ package h3d.shader;
|
|
|
class AlphaMSDF extends hxsl.Shader {
|
|
|
static var SRC = {
|
|
|
|
|
|
- @param var texture : Sampler2D;
|
|
|
- @param var blur : Float = 1;
|
|
|
-
|
|
|
var calculatedUV : Vec2;
|
|
|
var pixelColor : Vec4;
|
|
|
+ @input var input : { uv : Vec2 };
|
|
|
+ @const @param var useSourceUVs : Bool = true;
|
|
|
+
|
|
|
+ @param var texture : Sampler2D;
|
|
|
+ @param var blur : Float = 1;
|
|
|
+ @const var useColor : Bool = false;
|
|
|
+ @param var color : Vec3;
|
|
|
|
|
|
function median(r : Float, g : Float, b : Float) : Float {
|
|
|
return max(min(r, g), min(max(r, g), b));
|
|
@@ -20,10 +24,13 @@ class AlphaMSDF extends hxsl.Shader {
|
|
|
}
|
|
|
|
|
|
function fragment() {
|
|
|
- var sample = texture.get(calculatedUV);
|
|
|
+ var uv = useSourceUVs ? input.uv : calculatedUV;
|
|
|
+ var sample = texture.get(uv);
|
|
|
var sd = median(sample.r, sample.g, sample.b);
|
|
|
- var screenPxDistance = screenPxRange(calculatedUV)*(sd - 0.5);
|
|
|
+ var screenPxDistance = screenPxRange(uv)*(sd - 0.5);
|
|
|
pixelColor.a = clamp(screenPxDistance + 0.5, 0.0, 1.0);
|
|
|
+ if (useColor)
|
|
|
+ pixelColor.rgb = color;
|
|
|
}
|
|
|
}
|
|
|
}
|