[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