diff options
author | Jacques Lucke <jacques@blender.org> | 2021-12-06 21:05:29 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-12-06 21:13:24 +0300 |
commit | 2d4c7fa896ab4a6de163cd33746b54e67c7f8bac (patch) | |
tree | 71a0839f33a68172b15594dc76b83fe05315c273 /source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc | |
parent | 2814740f5be86fc389ba82ffbb3a40c43f47a9f5 (diff) |
Geometry Nodes: reduce code duplication with new GeometyrFieldInput
Most of our field inputs are currently specific to geometry. This patch introduces
a new `GeometryFieldInput` that reduces the overhead of adding new geometry
field input.
Differential Revision: https://developer.blender.org/D13489
Diffstat (limited to 'source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc | 79 |
1 files changed, 30 insertions, 49 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc index ed5805a158b..de352d217ed 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc @@ -202,29 +202,22 @@ static VArray<int> construct_index_on_spline_varray(const CurveEval &curve, return {}; } -class CurveParameterFieldInput final : public fn::FieldInput { +class CurveParameterFieldInput final : public GeometryFieldInput { public: - CurveParameterFieldInput() : fn::FieldInput(CPPType::get<float>(), "Curve Parameter node") + CurveParameterFieldInput() : GeometryFieldInput(CPPType::get<float>(), "Curve Parameter node") { category_ = Category::Generated; } - GVArray get_varray_for_context(const fn::FieldContext &context, - IndexMask mask, - ResourceScope &UNUSED(scope)) const final + GVArray get_varray_for_context(const GeometryComponent &component, + const AttributeDomain domain, + IndexMask mask) const final { - if (const GeometryComponentFieldContext *geometry_context = - dynamic_cast<const GeometryComponentFieldContext *>(&context)) { - - const GeometryComponent &component = geometry_context->geometry_component(); - const AttributeDomain domain = geometry_context->domain(); - - if (component.type() == GEO_COMPONENT_TYPE_CURVE) { - const CurveComponent &curve_component = static_cast<const CurveComponent &>(component); - const CurveEval *curve = curve_component.get_for_read(); - if (curve) { - return construct_curve_parameter_varray(*curve, mask, domain); - } + if (component.type() == GEO_COMPONENT_TYPE_CURVE) { + const CurveComponent &curve_component = static_cast<const CurveComponent &>(component); + const CurveEval *curve = curve_component.get_for_read(); + if (curve) { + return construct_curve_parameter_varray(*curve, mask, domain); } } return {}; @@ -242,28 +235,22 @@ class CurveParameterFieldInput final : public fn::FieldInput { } }; -class CurveLengthFieldInput final : public fn::FieldInput { +class CurveLengthFieldInput final : public GeometryFieldInput { public: - CurveLengthFieldInput() : fn::FieldInput(CPPType::get<float>(), "Curve Length node") + CurveLengthFieldInput() : GeometryFieldInput(CPPType::get<float>(), "Curve Length node") { category_ = Category::Generated; } - GVArray get_varray_for_context(const fn::FieldContext &context, - IndexMask mask, - ResourceScope &UNUSED(scope)) const final + GVArray get_varray_for_context(const GeometryComponent &component, + const AttributeDomain domain, + IndexMask mask) const final { - if (const GeometryComponentFieldContext *geometry_context = - dynamic_cast<const GeometryComponentFieldContext *>(&context)) { - - const GeometryComponent &component = geometry_context->geometry_component(); - const AttributeDomain domain = geometry_context->domain(); - if (component.type() == GEO_COMPONENT_TYPE_CURVE) { - const CurveComponent &curve_component = static_cast<const CurveComponent &>(component); - const CurveEval *curve = curve_component.get_for_read(); - if (curve) { - return construct_curve_length_varray(*curve, mask, domain); - } + if (component.type() == GEO_COMPONENT_TYPE_CURVE) { + const CurveComponent &curve_component = static_cast<const CurveComponent &>(component); + const CurveEval *curve = curve_component.get_for_read(); + if (curve) { + return construct_curve_length_varray(*curve, mask, domain); } } return {}; @@ -281,28 +268,22 @@ class CurveLengthFieldInput final : public fn::FieldInput { } }; -class IndexOnSplineFieldInput final : public fn::FieldInput { +class IndexOnSplineFieldInput final : public GeometryFieldInput { public: - IndexOnSplineFieldInput() : fn::FieldInput(CPPType::get<int>(), "Spline Index") + IndexOnSplineFieldInput() : GeometryFieldInput(CPPType::get<int>(), "Spline Index") { category_ = Category::Generated; } - GVArray get_varray_for_context(const fn::FieldContext &context, - IndexMask mask, - ResourceScope &UNUSED(scope)) const final + GVArray get_varray_for_context(const GeometryComponent &component, + const AttributeDomain domain, + IndexMask mask) const final { - if (const GeometryComponentFieldContext *geometry_context = - dynamic_cast<const GeometryComponentFieldContext *>(&context)) { - - const GeometryComponent &component = geometry_context->geometry_component(); - const AttributeDomain domain = geometry_context->domain(); - if (component.type() == GEO_COMPONENT_TYPE_CURVE) { - const CurveComponent &curve_component = static_cast<const CurveComponent &>(component); - const CurveEval *curve = curve_component.get_for_read(); - if (curve) { - return construct_index_on_spline_varray(*curve, mask, domain); - } + if (component.type() == GEO_COMPONENT_TYPE_CURVE) { + const CurveComponent &curve_component = static_cast<const CurveComponent &>(component); + const CurveEval *curve = curve_component.get_for_read(); + if (curve) { + return construct_index_on_spline_varray(*curve, mask, domain); } } return {}; |