Commit: 23de2dae5ebd472459557da534a3af15e5f45037 Author: Hans Goudey Date: Wed Apr 6 16:30:27 2022 -0500 Branches: temp-T96710-pbvh-pixels https://developer.blender.org/rB23de2dae5ebd472459557da534a3af15e5f45037
Curves: Name mutable data retrieval functions explicitly Add "for_write" on function names that retrieve mutable data arrays. Though this makes function names longer, it's likely worth it because it allows more easily using the const functions in a non-const context, and reduces cases of mistakenly retrieving with edit access. In the long term, this situation might change more if we implement attributes storage that is accessible directly on `CurvesGeometry` without duplicating the attribute API on geometry components, which is currently the rough plan. Differential Revision: https://developer.blender.org/D14562 =================================================================== M source/blender/blenkernel/BKE_curves.hh M source/blender/blenkernel/intern/curve_eval.cc M source/blender/blenkernel/intern/curves.cc M source/blender/blenkernel/intern/curves_geometry.cc M source/blender/blenkernel/intern/curves_geometry_test.cc M source/blender/editors/curves/intern/curves_add.cc M source/blender/editors/curves/intern/curves_ops.cc M source/blender/editors/sculpt_paint/curves_sculpt_add.cc M source/blender/editors/sculpt_paint/curves_sculpt_comb.cc M source/blender/editors/sculpt_paint/curves_sculpt_delete.cc M source/blender/editors/sculpt_paint/curves_sculpt_grow_shrink.cc M source/blender/editors/sculpt_paint/curves_sculpt_ops.cc M source/blender/editors/sculpt_paint/curves_sculpt_snake_hook.cc M source/blender/geometry/intern/mesh_to_curve_convert.cc M source/blender/geometry/intern/realize_instances.cc M source/blender/nodes/geometry/nodes/node_geo_curve_primitive_arc.cc M source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc M source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc M source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc M source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc M source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadrilateral.cc M source/blender/nodes/geometry/nodes/node_geo_curve_primitive_spiral.cc M source/blender/nodes/geometry/nodes/node_geo_curve_primitive_star.cc M source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc M source/blender/nodes/geometry/nodes/node_geo_curve_set_handle_type.cc M source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc M source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc =================================================================== diff --git a/source/blender/blenkernel/BKE_curves.hh b/source/blender/blenkernel/BKE_curves.hh index 4117f8b9bdc..8d24b6136b2 100644 --- a/source/blender/blenkernel/BKE_curves.hh +++ b/source/blender/blenkernel/BKE_curves.hh @@ -141,7 +141,7 @@ class CurvesGeometry : public ::CurvesGeometry { * number of curves. Consider using #points_for_curve rather than using the offsets directly. */ Span<int> offsets() const; - MutableSpan<int> offsets(); + MutableSpan<int> offsets_for_write(); /** * Access a range of indices of point data for a specific curve. @@ -152,19 +152,19 @@ class CurvesGeometry : public ::CurvesGeometry { /** The type (#CurveType) of each curve, or potentially a single if all are the same type. */ VArray<int8_t> curve_types() const; /** Mutable access to curve types. Call #tag_topology_changed after changing any type. */ - MutableSpan<int8_t> curve_types(); + MutableSpan<int8_t> curve_types_for_write(); bool has_curve_with_type(const CurveType type) const; /** Return the number of curves with each type. */ std::array<int, CURVE_TYPES_NUM> count_curve_types() const; - MutableSpan<float3> positions(); Span<float3> positions() const; + MutableSpan<float3> positions_for_write(); /** Whether the curve loops around to connect to itself, on the curve domain. */ VArray<bool> cyclic() const; /** Mutable access to curve cyclic values. Call #tag_topology_changed after changes. */ - MutableSpan<bool> cyclic(); + MutableSpan<bool> cyclic_for_write(); /** * How many evaluated points to create for each segment when evaluating Bezier, @@ -172,15 +172,15 @@ class CurvesGeometry : public ::CurvesGeometry { */ VArray<int> resolution() const; /** Mutable access to curve resolution. Call #tag_topology_changed after changes. */ - MutableSpan<int> resolution(); + MutableSpan<int> resolution_for_write(); /** * Handle types for Bezier control points. Call #tag_topology_changed after changes. */ VArray<int8_t> handle_types_left() const; - MutableSpan<int8_t> handle_types_left(); + MutableSpan<int8_t> handle_types_left_for_write(); VArray<int8_t> handle_types_right() const; - MutableSpan<int8_t> handle_types_right(); + MutableSpan<int8_t> handle_types_right_for_write(); /** * The positions of Bezier curve handles. Though these are really control points for the Bezier @@ -189,36 +189,36 @@ class CurvesGeometry : public ::CurvesGeometry { * after changes. */ Span<float3> handle_positions_left() const; - MutableSpan<float3> handle_positions_left(); + MutableSpan<float3> handle_positions_left_for_write(); Span<float3> handle_positions_right() const; - MutableSpan<float3> handle_positions_right(); + MutableSpan<float3> handle_positions_right_for_write(); /** * The order (degree plus one) of each NURBS curve, on the curve domain. * Call #tag_topology_changed after changes. */ VArray<int8_t> nurbs_orders() const; - MutableSpan<int8_t> nurbs_orders(); + MutableSpan<int8_t> nurbs_orders_for_write(); /** * The automatic generation mode for each NURBS curve's knots vector, on the curve domain. * Call #tag_topology_changed after changes. */ VArray<int8_t> nurbs_knots_modes() const; - MutableSpan<int8_t> nurbs_knots_modes(); + MutableSpan<int8_t> nurbs_knots_modes_for_write(); /** * The weight for each control point for NURBS curves. Call #tag_positions_changed after changes. */ Span<float> nurbs_weights() const; - MutableSpan<float> nurbs_weights(); + MutableSpan<float> nurbs_weights_for_write(); /** * The index of a triangle (#MLoopTri) that a curve is attached to. * The index is -1, if the curve is not attached. */ VArray<int> surface_triangle_indices() const; - MutableSpan<int> surface_triangle_indices(); + MutableSpan<int> surface_triangle_indices_for_write(); /** * Barycentric coordinates of the attachment point within a triangle. @@ -229,7 +229,7 @@ class CurvesGeometry : public ::CurvesGeometry { * The span can be empty, when all triangle indices are -1. */ Span<float2> surface_triangle_coords() const; - MutableSpan<float2> surface_triangle_coords(); + MutableSpan<float2> surface_triangle_coords_for_write(); /** * Calculate the largest and smallest position values, only including control points diff --git a/source/blender/blenkernel/intern/curve_eval.cc b/source/blender/blenkernel/intern/curve_eval.cc index 2cf83b57881..7761b7acc49 100644 --- a/source/blender/blenkernel/intern/curve_eval.cc +++ b/source/blender/blenkernel/intern/curve_eval.cc @@ -462,8 +462,8 @@ Curves *curve_eval_to_curves(const CurveEval &curve_eval) dst_component.replace(curves, GeometryOwnershipType::Editable); blender::bke::CurvesGeometry &geometry = blender::bke::CurvesGeometry::wrap(curves->geometry); - geometry.offsets().copy_from(curve_eval.control_point_offsets()); - MutableSpan<int8_t> curve_types = geometry.curve_types(); + geometry.offsets_for_write().copy_from(curve_eval.control_point_offsets()); + MutableSpan<int8_t> curve_types = geometry.curve_types_for_write(); OutputAttribute_Typed<float> nurbs_weight; OutputAttribute_Typed<int> nurbs_order; diff --git a/source/blender/blenkernel/intern/curves.cc b/source/blender/blenkernel/intern/curves.cc index 82db1176759..ebbdff55a55 100644 --- a/source/blender/blenkernel/intern/curves.cc +++ b/source/blender/blenkernel/intern/curves.cc @@ -318,7 +318,7 @@ static Curves *curves_evaluate_modifiers(struct Depsgraph *depsgraph, /* Created deformed coordinates array on demand. */ blender::bke::CurvesGeometry &geometry = blender::bke::CurvesGeometry::wrap( curves->geometry); - MutableSpan<float3> positions = geometry.positions(); + MutableSpan<float3> positions = geometry.positions_for_write(); mti->deformVerts(md, &mectx, @@ -378,8 +378,8 @@ Curves *curves_new_nomain_single(const int points_num, const CurveType type) { Curves *curves = curves_new_nomain(points_num, 1); CurvesGeometry &geometry = CurvesGeometry::wrap(curves->geometry); - geometry.offsets().last() = points_num; - geometry.curve_types().first() = type; + geometry.offsets_for_write().last() = points_num; + geometry.curve_types_for_write().first() = type; return curves; } diff --git a/source/blender/blenkernel/intern/curves_geometry.cc b/source/blender/blenkernel/intern/curves_geometry.cc index 552d7622932..9296aeafd52 100644 --- a/source/blender/blenkernel/intern/curves_geometry.cc +++ b/source/blender/blenkernel/intern/curves_geometry.cc @@ -78,7 +78,7 @@ static void copy_curves_geometry(CurvesGeometry &dst, const CurvesGeometry &src) MEM_SAFE_FREE(dst.curve_offsets); dst.curve_offsets = (int *)MEM_calloc_arrayN(dst.point_size + 1, sizeof(int), __func__); - dst.offsets().copy_from(src.offsets()); + dst.offsets_for_write().copy_from(src.offsets()); dst.tag_topology_changed(); @@ -224,7 +224,7 @@ VArray<int8_t> CurvesGeometry::curve_types() const *this, ATTR_DOMAIN_CURVE, ATTR_CURVE_TYPE, CURVE_TYPE_CATMULL_ROM); } -MutableSpan<int8_t> CurvesGeometry::curve_types() +MutableSpan<int8_t> CurvesGeometry::curve_types_for_write() { return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_CURVE, ATTR_CURVE_TYPE); } @@ -277,22 +277,22 @@ std::array<int, CURVE_TYPES_NUM> CurvesGeometry::count_curve_types() const }); } -MutableSpan<float3> CurvesGeometry::positions() +Span<float3> CurvesGeometry::positions() const +{ + return {(const float3 *)this->position, this->point_size}; +} +MutableSpan<float3> CurvesGeometry::positions_for_write() { this->position = (float(*)[3])CustomData_duplicate_referenced_layer_named( &this->point_data, CD_PROP_FLOAT3, ATTR_POSITION.c_str(), this->point_size); return {(float3 *)this->position, this->point_size}; } -Span<float3> CurvesGeometry::positions() const -{ - return {(const float3 *)this->position, this->point_size}; -} -MutableSpan<int> CurvesGeometry::offsets() +Span<int> CurvesGeometry::offsets() const { return {this->curve_offsets, this->curve_size + 1}; } -Span<int> CurvesGeometry::offsets() const +MutableSpan<int> CurvesGeometry::offsets_for_write() { return {this->curve_offsets, this->curve_size + 1}; } @@ -301,8 +301,7 @@ VArray<bool> CurvesGeometry::cyclic() const { return get_varray_attribute<bool>(*this, ATTR_DOMAIN_CURVE, ATTR_CYCLIC, false); } - -MutableSpan<bool> CurvesGeometry::cyclic() +MutableSpan<bool> CurvesGeometry::cyclic_for_write() { return get_mutable_attribute<bool>(*this, ATTR_DOMAIN_CURVE, ATTR_CYCLIC); } @@ -311,8 +310,7 @@ VArray<int> CurvesGeometry::resolution() const { return get_varray_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_RESOLUTION, 12); } - -MutableSpan<int> CurvesGeometry::resolution() +MutableSpan<int> CurvesGeometry::resolution_for_write() { return get_mutable_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_RESOLUTION); } @@ -321,7 +319,7 @@ VArray<int8_t> CurvesGeometry::handle_types_left() const { return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_LEFT, 0); } -MutableSpan<int8_t> CurvesGeometry::handle_types_left() +MutableSpan<int8_t> CurvesGeometry::handle_types_left_for_write() { return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_LEFT); } @@ -330,7 +328,7 @@ VArray<int8_t> CurvesGeometry::handle_types_right() const { return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_RIGHT, 0); } -MutableSpan<int8_t> CurvesGeometry::handle_types_right() +MutableSpan<int8_t> CurvesGeometry::handle_types_right_for_write() { return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_RIGHT); } @@ -339,7 +337,7 @@ Span<float3> CurvesGeometry::handle_positions_left() const { return get_span_attribute<float3>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_POSITION_LEFT); } -MutableSpan<float3> CurvesGeometry::handle_positions_left() +MutableSpan<float3> CurvesGeometry::handle_positions_left_for_write() { return get_mutable_attribute<float3>(*this, ATTR_DOMAIN_POINT, ATTR_ @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
