12 const mf::MultiFunction *base_fn =
nullptr;
16 static auto fn = mf::build::SI1_SO<float, float>(
20 if (base_fn !=
nullptr) {
26 static auto fn = mf::build::SI2_SO<float, float, float>(
30 if (base_fn !=
nullptr) {
36 static auto fn = mf::build::SI3_SO<float, float, float, float>(
40 if (base_fn !=
nullptr) {
49 const mf::MultiFunction &fn_;
66 mask.foreach_index_optimized<
int>([&](
const int i) {
67 float &value = results[
i];
68 CLAMP(value, 0.0f, 1.0f);
77 const bool clamp_output = builder.
node().
custom2 != 0;
89#define RETURN_OPERATION_INFO(title_case_name, shader_name) \
91 static const FloatMathOperationInfo info{title_case_name, shader_name}; \
181#undef RETURN_OPERATION_INFO
189#define RETURN_OPERATION_INFO(title_case_name, shader_name) \
191 static const FloatMathOperationInfo info{title_case_name, shader_name}; \
211#undef RETURN_OPERATION_INFO
219#define RETURN_OPERATION_INFO(title_case_name, shader_name) \
221 static const FloatMathOperationInfo info{title_case_name, shader_name}; \
287#undef RETURN_OPERATION_INFO
@ NODE_VECTOR_MATH_NORMALIZE
@ NODE_VECTOR_MATH_LENGTH
@ NODE_VECTOR_MATH_CROSS_PRODUCT
@ NODE_VECTOR_MATH_MODULO
@ NODE_VECTOR_MATH_COSINE
@ NODE_VECTOR_MATH_REFLECT
@ NODE_VECTOR_MATH_REFRACT
@ NODE_VECTOR_MATH_DOT_PRODUCT
@ NODE_VECTOR_MATH_ABSOLUTE
@ NODE_VECTOR_MATH_DIVIDE
@ NODE_VECTOR_MATH_TANGENT
@ NODE_VECTOR_MATH_DISTANCE
@ NODE_VECTOR_MATH_FRACTION
@ NODE_VECTOR_MATH_PROJECT
@ NODE_VECTOR_MATH_MULTIPLY
@ NODE_VECTOR_MATH_MAXIMUM
@ NODE_VECTOR_MATH_FACEFORWARD
@ NODE_VECTOR_MATH_SUBTRACT
@ NODE_VECTOR_MATH_MULTIPLY_ADD
@ NODE_VECTOR_MATH_MINIMUM
@ NODE_MATH_FLOORED_MODULO
@ NODE_COMPARE_LESS_EQUAL
@ NODE_COMPARE_GREATER_EQUAL
@ NODE_COMPARE_GREATER_THAN
constexpr const char * c_str() const
void set_signature(const Signature *signature)
void call(const IndexMask &mask, mf::Params params, mf::Context context) const override
ClampWrapperFunction(const mf::MultiFunction &fn)
void set_matching_fn(const mf::MultiFunction *fn)
void construct_and_set_matching_fn(Args &&...args)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
#define RETURN_OPERATION_INFO(title_case_name, shader_name)
void node_math_build_multi_function(NodeMultiFunctionBuilder &builder)
bool try_dispatch_float_math_fl_fl_to_fl(const int operation, Callback &&callback)
const FloatMathOperationInfo * get_float3_math_operation_info(const int operation)
static const mf::MultiFunction * get_base_multi_function(const bNode &node)
bool try_dispatch_float_math_fl_to_fl(const int operation, Callback &&callback)
const FloatMathOperationInfo * get_float_compare_operation_info(const int operation)
const FloatMathOperationInfo * get_float_math_operation_info(const int operation)
bool try_dispatch_float_math_fl_fl_fl_to_fl(const int operation, Callback &&callback)
StringRefNull title_case_name