[Bf-blender-cvs] [0940719b5ab] master: Line Art: Use local spans for mesh arrays

Hans Goudey noreply at git.blender.org
Mon Nov 28 15:57:13 CET 2022


Commit: 0940719b5ab3a35b6a3bd0d42b30dfe284550b14
Author: Hans Goudey
Date:   Sun Nov 27 22:37:23 2022 -0600
Branches: master
https://developer.blender.org/rB0940719b5ab3a35b6a3bd0d42b30dfe284550b14

Line Art: Use local spans for mesh arrays

Avoid accessing arrays from the mesh for every element and add safety
by using Span instead of raw pointers. Similar to previous commits.

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

M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc

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

diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc
index 8367950eb72..f9967ff3d02 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc
@@ -1476,6 +1476,7 @@ struct EdgeFeatData {
   const int *material_indices;
   blender::Span<MEdge> edges;
   blender::Span<MLoop> loops;
+  blender::Span<MPoly> polys;
   LineartTriangle *tri_array;
   LineartVert *v_array;
   float crease_threshold;
@@ -1641,13 +1642,11 @@ static void lineart_identify_mlooptri_feature_edges(void *__restrict userdata,
   }
 
   if (!only_contour) {
-    const MPoly *polys = BKE_mesh_polys(me);
-
     if (ld->conf.use_crease) {
       bool do_crease = true;
       if (!ld->conf.force_crease && !e_feat_data->use_auto_smooth &&
-          (polys[mlooptri[f1].poly].flag & ME_SMOOTH) &&
-          (polys[mlooptri[f2].poly].flag & ME_SMOOTH)) {
+          (e_feat_data->polys[mlooptri[f1].poly].flag & ME_SMOOTH) &&
+          (e_feat_data->polys[mlooptri[f2].poly].flag & ME_SMOOTH)) {
         do_crease = false;
       }
       if (do_crease && (dot_v3v3_db(tri1->gn, tri2->gn) < e_feat_data->crease_threshold)) {
@@ -1786,6 +1785,8 @@ static void lineart_triangle_adjacent_assign(LineartTriangle *tri,
 
 struct TriData {
   LineartObjectInfo *ob_info;
+  blender::Span<MVert> verts;
+  blender::Span<MLoop> loops;
   const MLoopTri *mlooptri;
   const int *material_indices;
   LineartVert *vert_arr;
@@ -1799,13 +1800,13 @@ static void lineart_load_tri_task(void *__restrict userdata,
                                   const TaskParallelTLS *__restrict /*tls*/)
 {
   TriData *tri_task_data = (TriData *)userdata;
-  Mesh *me = tri_task_data->ob_info->original_me;
   LineartObjectInfo *ob_info = tri_task_data->ob_info;
+  const blender::Span<MVert> verts = tri_task_data->verts;
+  const blender::Span<MLoop> loops = tri_task_data->loops;
   const MLoopTri *mlooptri = &tri_task_data->mlooptri[i];
   const int *material_indices = tri_task_data->material_indices;
   LineartVert *vert_arr = tri_task_data->vert_arr;
   LineartTriangle *tri = tri_task_data->tri_arr;
-  const MLoop *loops = BKE_mesh_loops(me);
 
   tri = (LineartTriangle *)(((uchar *)tri) + tri_task_data->lineart_triangle_size * i);
 
@@ -1838,7 +1839,6 @@ static void lineart_load_tri_task(void *__restrict userdata,
 
   double gn[3];
   float no[3];
-  const MVert *verts = BKE_mesh_verts(me);
   normal_tri_v3(no, verts[v1].co, verts[v2].co, verts[v3].co);
   copy_v3db_v3fl(gn, no);
   mul_v3_mat3_m4v3_db(tri->gn, ob_info->normal, gn);
@@ -2044,6 +2044,7 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info,
   TriData tri_data;
   tri_data.ob_info = ob_info;
   tri_data.mlooptri = mlooptri;
+  tri_data.verts = me->verts();
   tri_data.material_indices = material_indices;
   tri_data.vert_arr = la_v_arr;
   tri_data.tri_arr = la_tri_arr;
@@ -2074,6 +2075,7 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info,
   edge_feat_data.mlooptri = mlooptri;
   edge_feat_data.material_indices = material_indices;
   edge_feat_data.edges = me->edges();
+  edge_feat_data.polys = me->polys();
   edge_feat_data.loops = me->loops();
   edge_feat_data.edge_nabr = lineart_build_edge_neighbor(me, total_edges);
   edge_feat_data.tri_array = la_tri_arr;



More information about the Bf-blender-cvs mailing list