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.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user