[Bf-blender-cvs] [5c80543c436] master: Cleanup: Move geometry set fields to a separate header
Hans Goudey
noreply at git.blender.org
Fri Apr 1 15:40:55 CEST 2022
Commit: 5c80543c4366ee52bcc9d436c8fd7a740f7bbd9e
Author: Hans Goudey
Date: Fri Apr 1 08:40:45 2022 -0500
Branches: master
https://developer.blender.org/rB5c80543c4366ee52bcc9d436c8fd7a740f7bbd9e
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
===================================================================
A source/blender/blenkernel/BKE_geometry_fields.hh
M source/blender/blenkernel/BKE_geometry_set.hh
M source/blender/blenkernel/CMakeLists.txt
M source/blender/blenkernel/intern/attribute_access.cc
M source/blender/blenkernel/intern/geometry_component_curves.cc
M source/blender/blenkernel/intern/geometry_component_mesh.cc
M source/blender/blenkernel/intern/geometry_set.cc
M source/blender/editors/space_node/node_draw.cc
M source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
M source/blender/modifiers/intern/MOD_nodes.cc
M source/blender/nodes/NOD_geometry_exec.hh
M source/blender/nodes/NOD_geometry_nodes_eval_log.hh
===================================================================
diff --git a/source/blender/blenkernel/BKE_geometry_fields.hh b/source/blender/blenkernel/BKE_geometry_fields.hh
new file mode 100644
index 00000000000..36b382feb5f
--- /dev/null
+++ b/source/blender/blenkernel/BKE_geometry_fields.hh
@@ -0,0 +1,165 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+/** \file
+ * \ingroup bke
+ *
+ * Common field utilities and field definitions for geometry components.
+ */
+
+#include "BKE_geometry_set.hh"
+
+#include "FN_field.hh"
+
+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
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::
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list