Browse Source

Put Hs_aToRgba optimization in BuiltInFunctions

CPKreuz 11 months ago
parent
commit
8e099dfb4b

+ 1 - 11
src/PixiEditor.ChangeableDocument/Changeables/Graph/Context/FuncContext.cs

@@ -123,12 +123,7 @@ public class FuncContext
             return constantHalf4;
             return constantHalf4;
         }
         }
 
 
-        if (Half4Float1Accessor.AllAccessSame(h, s, v, a, out var half4))
-        {
-            return Builder.AssignNewHalf4(Builder.Functions.GetHsvToRgb(half4));
-        }
-        
-        return Builder.AssignNewHalf4(Builder.Functions.GetHsvToRgb(h, s, v, a));
+        return Builder.AssignNewHalf4(Builder.Functions.GetHslToRgb(h, s, v, a));
     }
     }
 
 
     public Half4 HslaToRgba(Expression h, Expression s, Expression l, Expression a)
     public Half4 HslaToRgba(Expression h, Expression s, Expression l, Expression a)
@@ -144,11 +139,6 @@ public class FuncContext
             return constantHalf4;
             return constantHalf4;
         }
         }
 
 
-        if (Half4Float1Accessor.AllAccessSame(h, s, l, a, out var half4))
-        {
-            return Builder.AssignNewHalf4(Builder.Functions.GetHslToRgb(half4));
-        }
-        
         return Builder.AssignNewHalf4(Builder.Functions.GetHslToRgb(h, s, l, a));
         return Builder.AssignNewHalf4(Builder.Functions.GetHslToRgb(h, s, l, a));
     }
     }
     
     

+ 3 - 3
src/PixiEditor.DrawingApi.Core/Shaders/Generation/BuiltInFunctions.cs

@@ -13,14 +13,14 @@ public class BuiltInFunctions
     public Expression GetRgbToHsl(Expression rgba) => Call(RgbToHsl, rgba);
     public Expression GetRgbToHsl(Expression rgba) => Call(RgbToHsl, rgba);
 
 
     public Expression GetHsvToRgb(Expression hsva) => Call(HsvToRgb, hsva);
     public Expression GetHsvToRgb(Expression hsva) => Call(HsvToRgb, hsva);
-    
+
     public Expression GetHsvToRgb(Expression h, Expression s, Expression v, Expression a) =>
     public Expression GetHsvToRgb(Expression h, Expression s, Expression v, Expression a) =>
-        GetHsvToRgb(Half4.Constructor(h, s, v, a));
+        GetHsvToRgb(Half4Float1Accessor.GetOrConstructorExpressionHalf4(h, s, v, a));
 
 
     public Expression GetHslToRgb(Expression hsla) => Call(HslToRgb, hsla);
     public Expression GetHslToRgb(Expression hsla) => Call(HslToRgb, hsla);
 
 
     public Expression GetHslToRgb(Expression h, Expression s, Expression l, Expression a) =>
     public Expression GetHslToRgb(Expression h, Expression s, Expression l, Expression a) =>
-        GetHslToRgb(Half4.Constructor(h, s, l, a));
+        GetHslToRgb(Half4Float1Accessor.GetOrConstructorExpressionHalf4(h, s, l, a));
 
 
     public string BuildFunctions()
     public string BuildFunctions()
     {
     {

+ 4 - 0
src/PixiEditor.DrawingApi.Core/Shaders/Generation/Expressions/Float1.cs

@@ -41,6 +41,8 @@ public class Half4Float1Accessor : Float1
         half4 = null;
         half4 = null;
         return false;
         return false;
     }
     }
+
+    public static Expression GetOrConstructorExpressionHalf4(Expression r, Expression g, Expression b, Expression a) => AllAccessSame(r, g, b, a, out var value) ? value : Half4.Constructor(r, g, b, a);
 }
 }
 
 
 public class Half3Float1Accessor : Float1
 public class Half3Float1Accessor : Float1
@@ -64,4 +66,6 @@ public class Half3Float1Accessor : Float1
         half3 = null;
         half3 = null;
         return false;
         return false;
     }
     }
+    
+    public static Expression GetOrConstructorExpressionHalf3(Expression r, Expression g, Expression b) => AllAccessSame(r, g, b, out var value) ? value : Half3.Constructor(r, g, b);
 }
 }

+ 2 - 3
src/PixiEditor.DrawingApi.Core/Shaders/Generation/Expressions/Half3.cs

@@ -33,8 +33,7 @@ public class Half3(string name) : ShaderExpressionVariable<VecD3>(name), IMultiV
     }
     }
 
 
     public static string ConstructorText(Expression r, Expression g, Expression b) =>
     public static string ConstructorText(Expression r, Expression g, Expression b) =>
-        $"half4({r.ExpressionValue}, {g.ExpressionValue}, {b.ExpressionValue})";
+        $"half3({r.ExpressionValue}, {g.ExpressionValue}, {b.ExpressionValue})";
 
 
-    public static Expression Constructor(Expression r, Expression g, Expression b) =>
-        new Expression(ConstructorText(r, g, b));
+    public static Expression Constructor(Expression r, Expression g, Expression b) => new(ConstructorText(r, g, b));
 }
 }