21 using bke::AnonymousAttributeFieldInput;
22 using bke::AttributeAccessor;
23 using bke::AttributeFieldInput;
24 using bke::AttributeIDRef;
25 using bke::AttributeKind;
26 using bke::AttributeMetaData;
27 using bke::AttributeReader;
28 using bke::AttributeWriter;
29 using bke::GAttributeReader;
30 using bke::GAttributeWriter;
31 using bke::GeometryComponentFieldContext;
32 using bke::GeometryFieldInput;
33 using bke::GSpanAttributeWriter;
34 using bke::MutableAttributeAccessor;
35 using bke::SpanAttributeWriter;
39 using fn::FieldContext;
40 using fn::FieldEvaluator;
42 using fn::FieldOperation;
44 using fn::ValueOrField;
119 is_same_any_v<T, float, int, bool, ColorGeometry4f, float3, std::string>;
130 this->check_input_access(identifier);
142 if constexpr (is_field_base_type_v<T>) {
143 ValueOrField<T> value_or_field = this->extract_input<ValueOrField<T>>(identifier);
146 else if constexpr (fn::is_field_v<T>) {
147 using BaseType =
typename T::base_type;
154 this->check_input_access(identifier, &CPPType::get<T>());
158 if constexpr (std::is_same_v<T, GeometrySet>) {
178 if constexpr (is_field_base_type_v<T>) {
183 values.
append(gvalue.relocate_out<
T>());
194 if constexpr (is_field_base_type_v<T>) {
195 ValueOrField<T> value_or_field = this->get_input<ValueOrField<T>>(identifier);
198 else if constexpr (fn::is_field_v<T>) {
199 using BaseType =
typename T::base_type;
205 this->check_input_access(identifier, &CPPType::get<T>());
209 const T &value = *(
const T *)gvalue.
get();
210 if constexpr (std::is_same_v<T, GeometrySet>) {
222 using StoredT = std::decay_t<T>;
223 if constexpr (is_field_base_type_v<StoredT>) {
226 else if constexpr (fn::is_field_v<StoredT>) {
227 using BaseType =
typename StoredT::base_type;
233 this->check_output_access(identifier,
type);
235 if constexpr (std::is_same_v<StoredT, GeometrySet>) {
239 new (gvalue.
get()) StoredT(std::forward<T>(value));
315 void check_input_access(
StringRef identifier,
const CPPType *requested_type =
nullptr)
const;
316 void check_output_access(
StringRef identifier,
const CPPType &value_type)
const;
struct Depsgraph Depsgraph
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
void append(const T &value)
virtual void set_default_remaining_outputs()=0
virtual GMutablePointer alloc_output_value(const CPPType &type)=0
virtual bool lazy_output_is_required(StringRef identifier) const =0
const ModifierData * modifier
virtual GMutablePointer extract_input(StringRef identifier)=0
geometry_nodes_eval_log::GeoLogger * logger
virtual void set_output(StringRef identifier, GMutablePointer value)=0
virtual bool lazy_require_input(StringRef identifier)=0
virtual GPointer get_input(StringRef identifier) const =0
virtual bool can_get_input(StringRef identifier) const =0
virtual void set_input_unused(StringRef identifier)=0
virtual bool can_set_output(StringRef identifier) const =0
virtual Vector< GMutablePointer > extract_multi_input(StringRef identifier)=0
virtual bool output_is_required(StringRef identifier) const =0
const Object * self_object
T extract_input(StringRef identifier)
GeoNodeExecParams(GeoNodeExecParamsProvider &provider)
GMutablePointer extract_input(StringRef identifier)
const bNode & node() const
void used_named_attribute(std::string attribute_name, eNamedAttrUsage usage)
Vector< T > extract_multi_input(StringRef identifier)
void set_output(StringRef identifier, T &&value)
Depsgraph * depsgraph() const
void set_input_unused(StringRef identifier)
void check_output_geometry_set(const GeometrySet &geometry_set) const
bool output_is_required(StringRef identifier) const
T get_input(StringRef identifier) const
void check_input_geometry_set(StringRef identifier, const GeometrySet &geometry_set) const
std::string attribute_producer_name() const
const Object * self_object() const
void set_default_remaining_outputs()
static constexpr bool is_field_base_type_v
bool lazy_output_is_required(StringRef identifier)
void error_message_add(const NodeWarningType type, std::string message) const
bool lazy_require_input(StringRef identifier)
OwnedAnonymousAttributeID< false > WeakAnonymousAttributeID
OwnedAnonymousAttributeID< true > StrongAnonymousAttributeID
Field< T > as_field() const