diff options
author | Hans Goudey <h.goudey@me.com> | 2022-04-01 16:40:45 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-04-01 16:40:45 +0300 |
commit | 5c80543c4366ee52bcc9d436c8fd7a740f7bbd9e (patch) | |
tree | e27866a595a07cb5f15a0a473fdab4e7d50acc9b /source/blender/blenkernel/BKE_geometry_set.hh | |
parent | 3ecdfd09386ee75629c09040163542d001726bbe (diff) |
Cleanup: Move geometry set fields to a separate header
This commit moves declarations that depend on `FN_field.hh` out of
`BKE_geometry_set.hh` into `BKE_geometry_fields.hh`. This helps to
reduce the number of areas that need to depend on the functions module,
which recently came in in review of D11591.
In the future we may have a library of standard field inputs in order to
make composing algorithms easier, so it makes sense to have a header
that could contain them and some basic related utilities relating the
concepts of geometry and fields.
Reducing use of unnecessary headers may also reduce compilation time.
Differential Revision: https://developer.blender.org/D14517
Diffstat (limited to 'source/blender/blenkernel/BKE_geometry_set.hh')
-rw-r--r-- | source/blender/blenkernel/BKE_geometry_set.hh | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/source/blender/blenkernel/BKE_geometry_set.hh b/source/blender/blenkernel/BKE_geometry_set.hh index bd392057436..559007d1aee 100644 --- a/source/blender/blenkernel/BKE_geometry_set.hh +++ b/source/blender/blenkernel/BKE_geometry_set.hh @@ -22,8 +22,6 @@ #include "BKE_attribute_access.hh" #include "BKE_geometry_set.h" -#include "FN_field.hh" - struct Curves; struct Collection; struct Curve; @@ -1019,155 +1017,3 @@ class VolumeComponent : public GeometryComponent { static constexpr inline GeometryComponentType static_type = GEO_COMPONENT_TYPE_VOLUME; }; - -namespace blender::bke { - -class GeometryComponentFieldContext : public fn::FieldContext { - private: - const GeometryComponent &component_; - const AttributeDomain domain_; - - public: - GeometryComponentFieldContext(const GeometryComponent &component, const AttributeDomain domain) - : component_(component), domain_(domain) - { - } - - const GeometryComponent &geometry_component() const - { - return component_; - } - - AttributeDomain domain() const - { - return domain_; - } -}; - -class GeometryFieldInput : public fn::FieldInput { - public: - using fn::FieldInput::FieldInput; - - GVArray get_varray_for_context(const fn::FieldContext &context, - IndexMask mask, - ResourceScope &scope) const override; - - virtual GVArray get_varray_for_context(const GeometryComponent &component, - AttributeDomain domain, - IndexMask mask) const = 0; -}; - -class AttributeFieldInput : public GeometryFieldInput { - private: - std::string name_; - - public: - AttributeFieldInput(std::string name, const CPPType &type) - : GeometryFieldInput(type, name), name_(std::move(name)) - { - category_ = Category::NamedAttribute; - } - - template<typename T> static fn::Field<T> Create(std::string name) - { - const CPPType &type = CPPType::get<T>(); - auto field_input = std::make_shared<AttributeFieldInput>(std::move(name), type); - return fn::Field<T>{field_input}; - } - - StringRefNull attribute_name() const - { - return name_; - } - - GVArray get_varray_for_context(const GeometryComponent &component, - AttributeDomain domain, - IndexMask mask) const override; - - std::string socket_inspection_name() const override; - - uint64_t hash() const override; - bool is_equal_to(const fn::FieldNode &other) const override; -}; - -class IDAttributeFieldInput : public GeometryFieldInput { - public: - IDAttributeFieldInput() : GeometryFieldInput(CPPType::get<int>()) - { - category_ = Category::Generated; - } - - GVArray get_varray_for_context(const GeometryComponent &component, - AttributeDomain domain, - IndexMask mask) const override; - - std::string socket_inspection_name() const override; - - uint64_t hash() const override; - bool is_equal_to(const fn::FieldNode &other) const override; -}; - -VArray<float3> curve_normals_varray(const CurveComponent &component, const AttributeDomain domain); - -VArray<float3> mesh_normals_varray(const MeshComponent &mesh_component, - const Mesh &mesh, - const IndexMask mask, - const AttributeDomain domain); - -class NormalFieldInput : public GeometryFieldInput { - public: - NormalFieldInput() : GeometryFieldInput(CPPType::get<float3>()) - { - category_ = Category::Generated; - } - - GVArray get_varray_for_context(const GeometryComponent &component, - const AttributeDomain domain, - IndexMask mask) const override; - - std::string socket_inspection_name() const override; - - uint64_t hash() const override; - bool is_equal_to(const fn::FieldNode &other) const override; -}; - -class AnonymousAttributeFieldInput : public GeometryFieldInput { - private: - /** - * A strong reference is required to make sure that the referenced attribute is not removed - * automatically. - */ - StrongAnonymousAttributeID anonymous_id_; - std::string producer_name_; - - public: - AnonymousAttributeFieldInput(StrongAnonymousAttributeID anonymous_id, - const CPPType &type, - std::string producer_name) - : GeometryFieldInput(type, anonymous_id.debug_name()), - anonymous_id_(std::move(anonymous_id)), - producer_name_(producer_name) - { - category_ = Category::AnonymousAttribute; - } - - template<typename T> - static fn::Field<T> Create(StrongAnonymousAttributeID anonymous_id, std::string producer_name) - { - const CPPType &type = CPPType::get<T>(); - auto field_input = std::make_shared<AnonymousAttributeFieldInput>( - std::move(anonymous_id), type, std::move(producer_name)); - return fn::Field<T>{field_input}; - } - - GVArray get_varray_for_context(const GeometryComponent &component, - AttributeDomain domain, - IndexMask mask) const override; - - std::string socket_inspection_name() const override; - - uint64_t hash() const override; - bool is_equal_to(const fn::FieldNode &other) const override; -}; - -} // namespace blender::bke |