Browse Source

Shadergraph: add clampX and clampY on sampler

lviguier 1 year ago
parent
commit
28764095c9
1 changed files with 14 additions and 7 deletions
  1. 14 7
      hrt/shgraph/nodes/Sampler.hx

+ 14 - 7
hrt/shgraph/nodes/Sampler.hx

@@ -13,9 +13,11 @@ var filters = [Nearest, Linear];
 enum abstract TexWrap(String) from String to String {
 	var Clamp;
 	var Repeat;
+	var ClampX;
+	var ClampY;
 }
 
-var wraps = [Clamp, Repeat];
+var wraps = [Clamp, Repeat, ClampX, ClampY];
 
 @name("Sample Texture 2D")
 @description("Get color from texture and UV")
@@ -34,14 +36,16 @@ class Sampler extends ShaderNodeHxsl {
 		@sgconst var wrap : Int;
 		@sgconst var filter : Int;
 
-
-
 		function fragment() {
 			var uv2 = uv;
-			if (wrap == 0) {
-				var size = texture.size();
+
+			var size = texture.size();
+			if (wrap == 0) // Clamp
 				uv2 = clamp(uv2, 0.5 / size, (size - vec2(0.5)) / size);
-			}
+			if (wrap == 2) // Clamp X
+				uv2.x = clamp(uv2.x, 0.5 / size.x, (size.x - 0.5) / size.x);
+			if (wrap == 3) // Clamp Y
+				uv2.y = clamp(uv2.y, 0.5 / size.y, (size.y - 0.5) / size.y);
 
 			if (filter == 0) {
 				var size = texture.size();
@@ -54,7 +58,10 @@ class Sampler extends ShaderNodeHxsl {
 	override function getConstValue(name: String) : Null<Int> {
 		switch (name) {
 			case "wrap":
-				return wrap == Clamp ? 0 : 1;
+				if ( wrap == Clamp ) return 0;
+				if ( wrap == ClampX ) return 2;
+				if ( wrap == ClampY ) return 3;
+				return 1;
 			case "filter":
 				return filter == Nearest ? 0 : 1;
 			default: