BKE: Add type conversion rules for float4

This patch adds conversion rules for the float4 type in BKE type
conversion. This is needed for use in the compositor.

Pull Request: https://projects.blender.org/blender/blender/pulls/134862
This commit is contained in:
Omar Emara
2025-02-21 07:41:34 +01:00
committed by Omar Emara
parent 51d7f386f6
commit d0ade434f7

View File

@@ -50,6 +50,10 @@ static float3 float_to_float3(const float &a)
{
return float3(a);
}
static float4 float_to_float4(const float &a)
{
return float4(a);
}
static int32_t float_to_int(const float &a)
{
return int32_t(a);
@@ -88,6 +92,10 @@ static float3 float2_to_float3(const float2 &a)
{
return float3(a.x, a.y, 0.0f);
}
static float4 float2_to_float4(const float2 &a)
{
return float4(a.x, a.y, 0.0f, 0.0f);
}
static float float2_to_float(const float2 &a)
{
return (a.x + a.y) / 2.0f;
@@ -149,6 +157,10 @@ static float2 float3_to_float2(const float3 &a)
{
return float2(a);
}
static float4 float3_to_float4(const float3 &a)
{
return float4(a, 0.0f);
}
static ColorGeometry4f float3_to_color(const float3 &a)
{
return ColorGeometry4f(a.x, a.y, a.z, 1.0f);
@@ -157,6 +169,55 @@ static ColorGeometry4b float3_to_byte_color(const float3 &a)
{
return float3_to_color(a).encode();
}
static math::Quaternion float3_to_quaternion(const float3 &a)
{
return math::to_quaternion(math::EulerXYZ(a));
}
static bool float4_to_bool(const float4 &a)
{
return !math::is_zero(a);
}
static int8_t float4_to_int8(const float4 &a)
{
return float_to_int8((a.x + a.y + a.z + a.w) / 4.0f);
}
static float float4_to_float(const float4 &a)
{
return (a.x + a.y + a.z + a.w) / 4.0f;
}
static int float4_to_int(const float4 &a)
{
return int((a.x + a.y + a.z + a.w) / 4.0f);
}
static short2 float4_to_short2(const float4 &a)
{
return short2(a.x, a.y);
}
static int2 float4_to_int2(const float4 &a)
{
return int2(a.x, a.y);
}
static float2 float4_to_float2(const float4 &a)
{
return a.xy();
}
static float3 float4_to_float3(const float4 &a)
{
return a.xyz();
}
static ColorGeometry4f float4_to_color(const float4 &a)
{
return ColorGeometry4f(a);
}
static ColorGeometry4b float4_to_byte_color(const float4 &a)
{
return float4_to_color(a).encode();
}
static math::Quaternion float4_to_quaternion(const float4 &a)
{
return math::Quaternion(a);
}
static bool int_to_bool(const int32_t &a)
{
@@ -187,6 +248,10 @@ static float3 int_to_float3(const int32_t &a)
{
return float3(float(a));
}
static float4 int_to_float4(const int32_t &a)
{
return float4(float(a));
}
static ColorGeometry4f int_to_color(const int32_t &a)
{
return ColorGeometry4f(float(a), float(a), float(a), 1.0f);
@@ -224,6 +289,10 @@ static float3 short2_to_float3(const short2 &a)
{
return float3(float(a.x), float(a.y), 0.0f);
}
static float4 short2_to_float4(const short2 &a)
{
return float4(float(a.x), float(a.y), 0.0f, 0.0f);
}
static ColorGeometry4f short2_to_color(const short2 &a)
{
return ColorGeometry4f(float(a.x), float(a.y), 0.0f, 1.0f);
@@ -261,6 +330,10 @@ static float3 int2_to_float3(const int2 &a)
{
return float3(float(a.x), float(a.y), 0.0f);
}
static float4 int2_to_float4(const int2 &a)
{
return float4(float(a.x), float(a.y), 0.0f, 0.0f);
}
static ColorGeometry4f int2_to_color(const int2 &a)
{
return ColorGeometry4f(float(a.x), float(a.y), 0.0f, 1.0f);
@@ -298,11 +371,10 @@ static float3 int8_to_float3(const int8_t &a)
{
return float3(float(a));
}
static math::Quaternion float3_to_quaternion(const float3 &a)
static float4 int8_to_float4(const int8_t &a)
{
return math::to_quaternion(math::EulerXYZ(a));
return float4(float(a));
}
static ColorGeometry4f int8_to_color(const int8_t &a)
{
return ColorGeometry4f(float(a), float(a), float(a), 1.0f);
@@ -340,6 +412,10 @@ static float3 bool_to_float3(const bool &a)
{
return (a) ? float3(1.0f) : float3(0.0f);
}
static float4 bool_to_float4(const bool &a)
{
return (a) ? float4(1.0f) : float4(0.0f);
}
static ColorGeometry4f bool_to_color(const bool &a)
{
return (a) ? ColorGeometry4f(1.0f, 1.0f, 1.0f, 1.0f) : ColorGeometry4f(0.0f, 0.0f, 0.0f, 1.0f);
@@ -381,6 +457,10 @@ static float3 color_to_float3(const ColorGeometry4f &a)
{
return float3(a.r, a.g, a.b);
}
static float4 color_to_float4(const ColorGeometry4f &a)
{
return float4(a);
}
static ColorGeometry4b color_to_byte_color(const ColorGeometry4f &a)
{
return a.encode();
@@ -418,6 +498,10 @@ static float3 byte_color_to_float3(const ColorGeometry4b &a)
{
return color_to_float3(a.decode());
}
static float4 byte_color_to_float4(const ColorGeometry4b &a)
{
return color_to_float4(a.decode());
}
static ColorGeometry4f byte_color_to_color(const ColorGeometry4b &a)
{
return a.decode();
@@ -432,7 +516,10 @@ static float3 quaternion_to_float3(const math::Quaternion &a)
{
return float3(math::to_euler(a).xyz());
}
static float4 quaternion_to_float4(const math::Quaternion &a)
{
return float4(a);
}
static float4x4 quaternion_to_float4x4(const math::Quaternion &a)
{
return math::from_rotation<float4x4>(a);
@@ -444,6 +531,7 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<float, float2, float_to_float2>(conversions);
add_implicit_conversion<float, float3, float_to_float3>(conversions);
add_implicit_conversion<float, float4, float_to_float4>(conversions);
add_implicit_conversion<float, int32_t, float_to_int>(conversions);
add_implicit_conversion<float, short2, float_to_short2>(conversions);
add_implicit_conversion<float, int2, float_to_int2>(conversions);
@@ -454,6 +542,7 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<float, math::Quaternion, float_to_quaternion>(conversions);
add_implicit_conversion<float2, float3, float2_to_float3>(conversions);
add_implicit_conversion<float2, float4, float2_to_float4>(conversions);
add_implicit_conversion<float2, float, float2_to_float>(conversions);
add_implicit_conversion<float2, int32_t, float2_to_int>(conversions);
add_implicit_conversion<float2, short2, float2_to_short2>(conversions);
@@ -470,10 +559,23 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<float3, short2, float3_to_short2>(conversions);
add_implicit_conversion<float3, int2, float3_to_int2>(conversions);
add_implicit_conversion<float3, float2, float3_to_float2>(conversions);
add_implicit_conversion<float3, float4, float3_to_float4>(conversions);
add_implicit_conversion<float3, ColorGeometry4f, float3_to_color>(conversions);
add_implicit_conversion<float3, ColorGeometry4b, float3_to_byte_color>(conversions);
add_implicit_conversion<float3, math::Quaternion, float3_to_quaternion>(conversions);
add_implicit_conversion<float4, bool, float4_to_bool>(conversions);
add_implicit_conversion<float4, int8_t, float4_to_int8>(conversions);
add_implicit_conversion<float4, float, float4_to_float>(conversions);
add_implicit_conversion<float4, int32_t, float4_to_int>(conversions);
add_implicit_conversion<float4, short2, float4_to_short2>(conversions);
add_implicit_conversion<float4, int2, float4_to_int2>(conversions);
add_implicit_conversion<float4, float2, float4_to_float2>(conversions);
add_implicit_conversion<float4, float3, float4_to_float3>(conversions);
add_implicit_conversion<float4, ColorGeometry4f, float4_to_color>(conversions);
add_implicit_conversion<float4, ColorGeometry4b, float4_to_byte_color>(conversions);
add_implicit_conversion<float4, math::Quaternion, float4_to_quaternion>(conversions);
add_implicit_conversion<int32_t, bool, int_to_bool>(conversions);
add_implicit_conversion<int32_t, int8_t, int_to_int8>(conversions);
add_implicit_conversion<int32_t, short2, int_to_short2>(conversions);
@@ -481,6 +583,7 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<int32_t, float, int_to_float>(conversions);
add_implicit_conversion<int32_t, float2, int_to_float2>(conversions);
add_implicit_conversion<int32_t, float3, int_to_float3>(conversions);
add_implicit_conversion<int32_t, float4, int_to_float4>(conversions);
add_implicit_conversion<int32_t, ColorGeometry4f, int_to_color>(conversions);
add_implicit_conversion<int32_t, ColorGeometry4b, int_to_byte_color>(conversions);
@@ -491,6 +594,7 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<short2, float, short2_to_float>(conversions);
add_implicit_conversion<short2, float2, short2_to_float2>(conversions);
add_implicit_conversion<short2, float3, short2_to_float3>(conversions);
add_implicit_conversion<short2, float4, short2_to_float4>(conversions);
add_implicit_conversion<short2, ColorGeometry4f, short2_to_color>(conversions);
add_implicit_conversion<short2, ColorGeometry4b, short2_to_byte_color>(conversions);
@@ -501,6 +605,7 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<int2, float, int2_to_float>(conversions);
add_implicit_conversion<int2, float2, int2_to_float2>(conversions);
add_implicit_conversion<int2, float3, int2_to_float3>(conversions);
add_implicit_conversion<int2, float4, int2_to_float4>(conversions);
add_implicit_conversion<int2, ColorGeometry4f, int2_to_color>(conversions);
add_implicit_conversion<int2, ColorGeometry4b, int2_to_byte_color>(conversions);
@@ -511,6 +616,7 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<int8_t, float, int8_to_float>(conversions);
add_implicit_conversion<int8_t, float2, int8_to_float2>(conversions);
add_implicit_conversion<int8_t, float3, int8_to_float3>(conversions);
add_implicit_conversion<int8_t, float4, int8_to_float4>(conversions);
add_implicit_conversion<int8_t, ColorGeometry4f, int8_to_color>(conversions);
add_implicit_conversion<int8_t, ColorGeometry4b, int8_to_byte_color>(conversions);
@@ -521,6 +627,7 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<bool, int2, bool_to_int2>(conversions);
add_implicit_conversion<bool, float2, bool_to_float2>(conversions);
add_implicit_conversion<bool, float3, bool_to_float3>(conversions);
add_implicit_conversion<bool, float4, bool_to_float4>(conversions);
add_implicit_conversion<bool, ColorGeometry4f, bool_to_color>(conversions);
add_implicit_conversion<bool, ColorGeometry4b, bool_to_byte_color>(conversions);
@@ -532,6 +639,7 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<ColorGeometry4f, int2, color_to_int2>(conversions);
add_implicit_conversion<ColorGeometry4f, float2, color_to_float2>(conversions);
add_implicit_conversion<ColorGeometry4f, float3, color_to_float3>(conversions);
add_implicit_conversion<ColorGeometry4f, float4, color_to_float4>(conversions);
add_implicit_conversion<ColorGeometry4f, ColorGeometry4b, color_to_byte_color>(conversions);
add_implicit_conversion<ColorGeometry4b, bool, byte_color_to_bool>(conversions);
@@ -542,11 +650,13 @@ static DataTypeConversions create_implicit_conversions()
add_implicit_conversion<ColorGeometry4b, int2, byte_color_to_int2>(conversions);
add_implicit_conversion<ColorGeometry4b, float2, byte_color_to_float2>(conversions);
add_implicit_conversion<ColorGeometry4b, float3, byte_color_to_float3>(conversions);
add_implicit_conversion<ColorGeometry4b, float4, byte_color_to_float4>(conversions);
add_implicit_conversion<ColorGeometry4b, ColorGeometry4f, byte_color_to_color>(conversions);
add_implicit_conversion<float4x4, math::Quaternion, float4x4_to_quaternion>(conversions);
add_implicit_conversion<math::Quaternion, float3, quaternion_to_float3>(conversions);
add_implicit_conversion<math::Quaternion, float4, quaternion_to_float4>(conversions);
add_implicit_conversion<math::Quaternion, float4x4, quaternion_to_float4x4>(conversions);
return conversions;