29 template<
typename From,
typename To, To (*ConversionF)(const From &)>
32 const CPPType &from_type = CPPType::get<From>();
33 const CPPType &to_type = CPPType::get<To>();
34 const std::string conversion_name = from_type.
name() +
" to " + to_type.
name();
37 static auto convert_single_to_initialized = [](
const void *src,
void *dst) {
38 *(To *)dst = ConversionF(*(
const From *)src);
40 static auto convert_single_to_uninitialized = [](
const void *src,
void *dst) {
41 new (dst) To(ConversionF(*(
const From *)src));
43 conversions.
add(fn::MFDataType::ForSingle<From>(),
44 fn::MFDataType::ForSingle<To>(),
46 convert_single_to_initialized,
47 convert_single_to_uninitialized);
77 return (
a.x +
a.y) / 2.0f;
98 return (
a.x +
a.y +
a.z) / 3.0f;
102 return (
int)((
a.x +
a.y +
a.z) / 3.0f);
131 return Color4f((
float)
a, (
float)
a, (
float)
a, 1.0f);
152 return (
a) ?
Color4f(1.0f, 1.0f, 1.0f, 1.0f) :
Color4f(0.0f, 0.0f, 0.0f, 1.0f);
180 add_implicit_conversion<float, float2, float_to_float2>(conversions);
181 add_implicit_conversion<float, float3, float_to_float3>(conversions);
182 add_implicit_conversion<float, int32_t, float_to_int>(conversions);
183 add_implicit_conversion<float, bool, float_to_bool>(conversions);
184 add_implicit_conversion<float, Color4f, float_to_color>(conversions);
186 add_implicit_conversion<float2, float3, float2_to_float3>(conversions);
187 add_implicit_conversion<float2, float, float2_to_float>(conversions);
188 add_implicit_conversion<float2, int32_t, float2_to_int>(conversions);
189 add_implicit_conversion<float2, bool, float2_to_bool>(conversions);
190 add_implicit_conversion<float2, Color4f, float2_to_color>(conversions);
192 add_implicit_conversion<float3, bool, float3_to_bool>(conversions);
193 add_implicit_conversion<float3, float, float3_to_float>(conversions);
194 add_implicit_conversion<float3, int32_t, float3_to_int>(conversions);
195 add_implicit_conversion<float3, float2, float3_to_float2>(conversions);
196 add_implicit_conversion<float3, Color4f, float3_to_color>(conversions);
198 add_implicit_conversion<int32_t, bool, int_to_bool>(conversions);
199 add_implicit_conversion<int32_t, float, int_to_float>(conversions);
200 add_implicit_conversion<int32_t, float2, int_to_float2>(conversions);
201 add_implicit_conversion<int32_t, float3, int_to_float3>(conversions);
202 add_implicit_conversion<int32_t, Color4f, int_to_color>(conversions);
204 add_implicit_conversion<bool, float, bool_to_float>(conversions);
205 add_implicit_conversion<bool, int32_t, bool_to_int>(conversions);
206 add_implicit_conversion<bool, float2, bool_to_float2>(conversions);
207 add_implicit_conversion<bool, float3, bool_to_float3>(conversions);
208 add_implicit_conversion<bool, Color4f, bool_to_color>(conversions);
210 add_implicit_conversion<Color4f, bool, color_to_bool>(conversions);
211 add_implicit_conversion<Color4f, float, color_to_float>(conversions);
212 add_implicit_conversion<Color4f, int32_t, color_to_int>(conversions);
213 add_implicit_conversion<Color4f, float2, color_to_float2>(conversions);
214 add_implicit_conversion<Color4f, float3, color_to_float3>(conversions);
227 const void *from_value,
228 void *to_value)
const
MINLINE float rgb_to_grayscale(const float rgb[3])
MINLINE bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE bool is_zero_v2(const float a[3]) ATTR_WARN_UNUSED_RESULT
StringRefNull name() const
static MFDataType ForSingle()
void convert_to_uninitialized(const CPPType &from_type, const CPPType &to_type, const void *from_value, void *to_value) const
const ConversionFunctions * get_conversion_functions(fn::MFDataType from, fn::MFDataType to) const
void add(fn::MFDataType from_type, fn::MFDataType to_type, const fn::MultiFunction &fn, void(*convert_single_to_initialized)(const void *src, void *dst), void(*convert_single_to_uninitialized)(const void *src, void *dst))
static bool color_to_bool(const Color4f &a)
static float3 int_to_float3(const int32_t &a)
static float2 int_to_float2(const int32_t &a)
static float2 color_to_float2(const Color4f &a)
static float color_to_float(const Color4f &a)
static int32_t float_to_int(const float &a)
static float bool_to_float(const bool &a)
static int32_t bool_to_int(const bool &a)
static void add_implicit_conversion(DataTypeConversions &conversions)
static DataTypeConversions create_implicit_conversions()
static float3 color_to_float3(const Color4f &a)
static float3 float_to_float3(const float &a)
const DataTypeConversions & get_implicit_type_conversions()
static float2 bool_to_float2(const bool &a)
static float3 bool_to_float3(const bool &a)
static Color4f int_to_color(const int32_t &a)
static bool float3_to_bool(const float3 &a)
static Color4f bool_to_color(const bool &a)
static float2 float3_to_float2(const float3 &a)
static int float3_to_int(const float3 &a)
static int float2_to_int(const float2 &a)
static int32_t color_to_int(const Color4f &a)
static bool float2_to_bool(const float2 &a)
static bool int_to_bool(const int32_t &a)
static float2 float_to_float2(const float &a)
static Color4f float2_to_color(const float2 &a)
static Color4f float3_to_color(const float3 &a)
static float float3_to_float(const float3 &a)
static float int_to_float(const int32_t &a)
static float float2_to_float(const float2 &a)
static bool float_to_bool(const float &a)
static float3 float2_to_float3(const float2 &a)
static Color4f float_to_color(const float &a)
void(* convert_single_to_uninitialized)(const void *src, void *dst)