85 const std::shared_ptr<const FieldInputs> &
field_inputs()
const;
113 operator bool()
const
115 return node_ !=
nullptr;
204 static_assert(std::is_same_v<T, U>);
215static constexpr bool is_field_v = std::is_base_of_v<detail::TypedFieldBase, T> &&
216 !std::is_same_v<detail::TypedFieldBase, T>;
226 std::shared_ptr<const mf::MultiFunction> owned_function_;
227 const mf::MultiFunction *function_;
242 static std::shared_ptr<FieldOperation>
from(std::shared_ptr<const mf::MultiFunction> function,
247 static std::shared_ptr<FieldOperation>
from(
const mf::MultiFunction &function,
337 struct OutputPointerInfo {
351 bool is_evaluated_ =
false;
359 : context_(context), mask_(*
mask)
365 : context_(context), mask_(scope_.construct<
IndexMask>(
size))
385 selection_field_ = std::move(selection);
429 const int field_index = fields_to_evaluate_.append_and_get_index(std::move(field));
430 dst_varrays_.append({});
431 output_pointer_infos_.append(OutputPointerInfo{
451 return evaluated_varrays_[field_index];
490 const FieldContext &context,
571 return this == &other;
602 int output_counter = 0;
603 for (
const int param_index : function_->param_indices()) {
604 mf::ParamType param_type = function_->param_type(param_index);
605 if (param_type.is_output()) {
606 if (output_counter == output_index) {
607 return param_type.data_type().single_type();
#define BLI_assert_unreachable()
#define UNUSED_VARS_NDEBUG(...)
unsigned long long int uint64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static const CPPType & get()
VArray< T > typed() const
NonCopyable(const NonCopyable &other)=delete
NonMovable(NonMovable &&other)=delete
static VMutableArray from_span(MutableSpan< T > values)
FieldConstant(const CPPType &type, const void *value)
const CPPType & type() const
const CPPType & output_cpp_type(int output_index) const override
~FieldConstant() override
virtual GVArray get_varray_for_input(const FieldInput &field_input, const IndexMask &mask, ResourceScope &scope) const
virtual ~FieldContext()=default
FieldEvaluator(const FieldContext &context, const int64_t size)
FieldEvaluator(const FieldContext &context, const IndexMask *mask)
void set_selection(Field< bool > selection)
int add(GField field, GVArray *varray_ptr)
IndexMask get_evaluated_as_mask(int field_index)
int add(Field< T > field, VArray< T > *varray_ptr)
IndexMask get_evaluated_selection_as_mask() const
int add_with_destination(Field< T > field, MutableSpan< T > dst)
VArray< T > get_evaluated(const int field_index)
int add_with_destination(GField field, GVMutableArray dst)
const GVArray & get_evaluated(const int field_index) const
int add_with_destination(Field< T > field, VMutableArray< T > dst)
FieldNodeType node_type() const
virtual void for_each_field_input_recursive(FunctionRef< void(const FieldInput &)> fn) const
std::shared_ptr< const FieldInputs > field_inputs_
virtual bool is_equal_to(const FieldNode &other) const
virtual uint64_t hash() const
virtual const CPPType & output_cpp_type(int output_index) const =0
FieldNode(FieldNodeType node_type)
bool depends_on_input() const
const std::shared_ptr< const FieldInputs > & field_inputs() const
Span< GField > inputs() const
static std::shared_ptr< FieldOperation > from(const mf::MultiFunction &function, Vector< GField > inputs={})
~FieldOperation() override
FieldOperation(std::shared_ptr< const mf::MultiFunction > function, Vector< GField > inputs={})
static std::shared_ptr< FieldOperation > from(std::shared_ptr< const mf::MultiFunction > function, Vector< GField > inputs={})
const CPPType & output_cpp_type(int output_index) const override
const mf::MultiFunction & multi_function() const
Field(std::shared_ptr< FieldNode > node, const int node_output_index=0)
GFieldBase(NodePtr node, const int node_output_index)
const CPPType & cpp_type() const
const FieldNode & node() const
int node_output_index() const
friend bool operator==(const GFieldBase &a, const GFieldBase &b)
GFieldRef(const FieldNode &node, const int node_output_index=0)
GFieldRef(const GField &field)
GField(std::shared_ptr< FieldNode > node, const int node_output_index=0)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
bool operator==(const FieldNode &a, const FieldNode &b)
bool operator!=(const FieldNode &a, const FieldNode &b)
GField make_constant_field(const CPPType &type, const void *value)
Vector< GVArray > evaluate_fields(ResourceScope &scope, Span< GFieldRef > fields_to_evaluate, const IndexMask &mask, const FieldContext &context, Span< GVMutableArray > dst_varrays={})
GField make_field_constant_if_possible(GField field)
Field< bool > invert_boolean_field(const Field< bool > &field)
void evaluate_constant_field(const GField &field, void *r_value)
static constexpr bool is_field_v
uint64_t get_default_hash(const T &v, const Args &...args)
static blender::bke::bNodeSocketTemplate inputs[]