Explorar o código

Refacto Color Grading to extract function

borisrp hai 7 meses
pai
achega
974fe89a7e
Modificáronse 1 ficheiros con 25 adicións e 15 borrados
  1. 25 15
      hrt/prefab/rfx/ColorGrading.hx

+ 25 - 15
hrt/prefab/rfx/ColorGrading.hx

@@ -2,31 +2,41 @@ package hrt.prefab.rfx;
 
 import hxd.Pixels;
 
-class ColorGradingTonemap extends hxsl.Shader {
+class ColorGradingFunc extends hxsl.Shader {
 	static var SRC = {
-
-		@param var size : Int;
-		@param var intensity : Float;
-		@param var lut : Sampler2D;
-		var hdrColor : Vec4;
-		var pixelColor : Vec4;
-
-		function fragment() {
-			var uv = pixelColor.rgb;
+		function getColorGrading(base : Vec3, lut : Sampler2D, size : Float) : Vec3 {
 			var innerWidth = size - 1.0;
 			var sliceSize = 1.0 / size;
 			var slicePixelSize = sliceSize / size;
 			var sliceInnerSize = slicePixelSize * innerWidth;
-			var blueSlice0 = min(floor(uv.b * innerWidth), innerWidth);
+			var blueSlice0 = min(floor(base.b * innerWidth), innerWidth);
 			var blueSlice1 = min(blueSlice0 + 1.0, innerWidth);
-			var xOffset = slicePixelSize * 0.5 + uv.r * sliceInnerSize;
-			var yOffset = sliceSize * 0.5 + uv.g * (1.0 - sliceSize);
+			var xOffset = slicePixelSize * 0.5 + base.r * sliceInnerSize;
+			var yOffset = sliceSize * 0.5 + base.g * (1.0 - sliceSize);
 			var s0 = vec2(xOffset + (blueSlice0 * sliceSize), yOffset);
 			var s1 = vec2(xOffset + (blueSlice1 * sliceSize), yOffset);
 			var slice0Color = texture(lut, s0).rgb;
 			var slice1Color = texture(lut, s1).rgb;
-			var bOffset = mod(uv.b * innerWidth, 1.0);
-			pixelColor.rgb = mix(pixelColor.rgb, mix(slice0Color, slice1Color, bOffset), intensity);
+			var bOffset = mod(base.b * innerWidth, 1.0);
+			return mix(slice0Color, slice1Color, bOffset);
+		}
+	}
+}
+
+class ColorGradingTonemap extends hxsl.Shader {
+	static var SRC = {
+
+		@param var size : Int;
+		@param var intensity : Float;
+		@param var lut : Sampler2D;
+		var hdrColor : Vec4;
+		var pixelColor : Vec4;
+
+		@:import ColorGradingFunc;
+
+		function fragment() {
+			var colorGrading = getColorGrading(pixelColor.rgb, lut, size);
+			pixelColor.rgb = mix(pixelColor.rgb, colorGrading, intensity);
 		}
 	}
 }