[Bf-blender-cvs] [dde5cc6670f] master: Cleanup: Use curves wrapper

Hans Goudey noreply at git.blender.org
Mon Feb 21 23:06:25 CET 2022


Commit: dde5cc6670f3f41e617f5b5fd49d7982c0304c21
Author: Hans Goudey
Date:   Mon Feb 21 17:06:17 2022 -0500
Branches: master
https://developer.blender.org/rBdde5cc6670f3f41e617f5b5fd49d7982c0304c21

Cleanup: Use curves wrapper

===================================================================

M	source/blender/blenkernel/intern/curves.cc
M	source/blender/blenkernel/intern/curves_geometry.cc
M	source/blender/draw/intern/draw_cache_impl_curves.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/curves.cc b/source/blender/blenkernel/intern/curves.cc
index e4a57ee1897..9935166f874 100644
--- a/source/blender/blenkernel/intern/curves.cc
+++ b/source/blender/blenkernel/intern/curves.cc
@@ -358,16 +358,16 @@ static Curves *curves_evaluate_modifiers(struct Depsgraph *depsgraph,
         curves = BKE_curves_copy_for_eval(curves, true);
       }
 
-      /* Ensure we are not overwriting referenced data. */
-      CustomData_duplicate_referenced_layer_named(&curves->geometry.point_data,
-                                                  CD_PROP_FLOAT3,
-                                                  ATTR_POSITION,
-                                                  curves->geometry.point_size);
-      update_custom_data_pointers(*curves);
-
       /* Created deformed coordinates array on demand. */
-      mti->deformVerts(
-          md, &mectx, nullptr, curves->geometry.position, curves->geometry.point_size);
+      blender::bke::CurvesGeometry &geometry = blender::bke::CurvesGeometry::wrap(
+          curves->geometry);
+      MutableSpan<float3> positions = geometry.positions();
+
+      mti->deformVerts(md,
+                       &mectx,
+                       nullptr,
+                       reinterpret_cast<float(*)[3]>(positions.data()),
+                       curves->geometry.point_size);
     }
   }
 
diff --git a/source/blender/blenkernel/intern/curves_geometry.cc b/source/blender/blenkernel/intern/curves_geometry.cc
index ac40b7a7aa1..3e45fce3776 100644
--- a/source/blender/blenkernel/intern/curves_geometry.cc
+++ b/source/blender/blenkernel/intern/curves_geometry.cc
@@ -142,8 +142,8 @@ MutableSpan<int8_t> CurvesGeometry::curve_types()
 
 MutableSpan<float3> CurvesGeometry::positions()
 {
-  CustomData_duplicate_referenced_layer(&this->point_data, CD_PROP_FLOAT3, this->point_size);
-  this->update_customdata_pointers();
+  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
diff --git a/source/blender/draw/intern/draw_cache_impl_curves.cc b/source/blender/draw/intern/draw_cache_impl_curves.cc
index 2153b674463..df1ac12605a 100644
--- a/source/blender/draw/intern/draw_cache_impl_curves.cc
+++ b/source/blender/draw/intern/draw_cache_impl_curves.cc
@@ -133,12 +133,12 @@ static void curves_batch_cache_fill_segments_proc_pos(Curves *curves,
 {
   /* TODO: use hair radius layer if available. */
   const int curve_size = curves->geometry.curve_size;
-  Span<int> offsets{curves->geometry.curve_offsets, curves->geometry.curve_size + 1};
-
-  Span<float3> positions{(float3 *)curves->geometry.position, curves->geometry.point_size};
+  const blender::bke::CurvesGeometry &geometry = blender::bke::CurvesGeometry::wrap(
+      curves->geometry);
+  Span<float3> positions = geometry.positions();
 
   for (const int i : IndexRange(curve_size)) {
-    const IndexRange curve_range(offsets[i], offsets[i + 1] - offsets[i]);
+    const IndexRange curve_range = geometry.range_for_curve(i);
 
     Span<float3> spline_positions = positions.slice(curve_range);
     float total_len = 0.0f;
@@ -215,11 +215,11 @@ static void curves_batch_cache_fill_strands_data(Curves *curves,
                                                  GPUVertBufRaw *data_step,
                                                  GPUVertBufRaw *seg_step)
 {
-  const int curve_size = curves->geometry.curve_size;
-  Span<int> offsets{curves->geometry.curve_offsets, curves->geometry.curve_size + 1};
+  const blender::bke::CurvesGeometry &geometry = blender::bke::CurvesGeometry::wrap(
+      curves->geometry);
 
-  for (const int i : IndexRange(curve_size)) {
-    const IndexRange curve_range(offsets[i], offsets[i + 1] - offsets[i]);
+  for (const int i : IndexRange(geometry.curves_size())) {
+    const IndexRange curve_range = geometry.range_for_curve(i);
 
     *(uint *)GPU_vertbuf_raw_step(data_step) = curve_range.start();
     *(ushort *)GPU_vertbuf_raw_step(seg_step) = curve_range.size() - 1;



More information about the Bf-blender-cvs mailing list