[Bf-blender-cvs] [b31fb9a0256] refactor-mesh-material-index-generic: Merge branch 'master' into refactor-mesh-material-index-generic
Hans Goudey
noreply at git.blender.org
Sat Aug 27 07:05:23 CEST 2022
Commit: b31fb9a025635af48e5aa3c6e60327354f2fa2e3
Author: Hans Goudey
Date: Fri Aug 26 23:29:50 2022 -0500
Branches: refactor-mesh-material-index-generic
https://developer.blender.org/rBb31fb9a025635af48e5aa3c6e60327354f2fa2e3
Merge branch 'master' into refactor-mesh-material-index-generic
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/mesh.cc
index 2cf6aacc81a,272dd922caa..601b8583110
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -246,15 -246,17 +247,18 @@@ static void mesh_blend_write(BlendWrite
memset(&mesh->pdata, 0, sizeof(mesh->pdata));
}
else {
+ Set<std::string> names_to_skip;
if (!BLO_write_is_undo(writer)) {
BKE_mesh_legacy_convert_hide_layers_to_flags(mesh);
+ BKE_mesh_legacy_convert_material_indices_to_mpoly(mesh);
+ /* When converting to the old mesh format, don't save redundant attributes. */
+ names_to_skip.add_multiple_new({".hide_vert", ".hide_edge", ".hide_poly"});
}
- CustomData_blend_write_prepare(mesh->vdata, vert_layers, {".hide_vert"});
- CustomData_blend_write_prepare(mesh->edata, edge_layers, {".hide_edge"});
- CustomData_blend_write_prepare(mesh->ldata, loop_layers);
- CustomData_blend_write_prepare(mesh->pdata, poly_layers, {".hide_poly"});
+ CustomData_blend_write_prepare(mesh->vdata, vert_layers, names_to_skip);
+ CustomData_blend_write_prepare(mesh->edata, edge_layers, names_to_skip);
+ CustomData_blend_write_prepare(mesh->ldata, loop_layers, names_to_skip);
+ CustomData_blend_write_prepare(mesh->pdata, poly_layers, names_to_skip);
}
BLO_write_id_struct(writer, Mesh, id_address, &mesh->id);
diff --cc source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 8b5bac45faa,ce0a00f5e51..bde15515cb7
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@@ -1470,9 -1470,8 +1470,9 @@@ static LineartTriangle *lineart_triangl
typedef struct EdgeFeatData {
LineartData *ld;
Mesh *me;
- Object *ob;
+ Object *ob_eval; /* For evaluated materials. */
const MLoopTri *mlooptri;
+ const int *material_indices;
LineartTriangle *tri_array;
LineartVert *v_array;
float crease_threshold;
@@@ -1504,8 -1503,7 +1504,8 @@@ static void lineart_identify_mlooptri_f
EdgeFeatData *e_feat_data = (EdgeFeatData *)userdata;
EdgeFeatReduceData *reduce_data = (EdgeFeatReduceData *)tls->userdata_chunk;
Mesh *me = e_feat_data->me;
+ const int *material_indices = e_feat_data->material_indices;
- Object *ob = e_feat_data->ob;
+ Object *ob_eval = e_feat_data->ob_eval;
LineartEdgeNeighbor *edge_nabr = e_feat_data->edge_nabr;
const MLoopTri *mlooptri = e_feat_data->mlooptri;
@@@ -1651,12 -1649,12 +1651,12 @@@
}
}
- int mat1 = me->mpoly[mlooptri[f1].poly].mat_nr;
- int mat2 = me->mpoly[mlooptri[f2].poly].mat_nr;
+ int mat1 = material_indices ? material_indices[mlooptri[f1].poly] : 0;
+ int mat2 = material_indices ? material_indices[mlooptri[f2].poly] : 0;
if (mat1 != mat2) {
- Material *m1 = BKE_object_material_get(ob, mat1 + 1);
- Material *m2 = BKE_object_material_get(ob, mat2 + 1);
+ Material *m1 = BKE_object_material_get_eval(ob_eval, mat1 + 1);
+ Material *m2 = BKE_object_material_get_eval(ob_eval, mat2 + 1);
if (m1 && m2 &&
((m1->lineart.mat_occlusion == 0 && m2->lineart.mat_occlusion != 0) ||
(m2->lineart.mat_occlusion == 0 && m1->lineart.mat_occlusion != 0))) {
@@@ -1873,8 -1869,8 +1873,8 @@@ static void lineart_load_tri_task(void
tri->v[2] = &vert_arr[v3];
/* Material mask bits and occlusion effectiveness assignment. */
- Material *mat = BKE_object_material_get_eval(ob_info->original_ob_eval,
- me->mpoly[mlooptri->poly].mat_nr + 1);
+ Material *mat = BKE_object_material_get(
- ob_info->original_ob, material_indices ? material_indices[mlooptri->poly] + 1 : 1);
++ ob_info->original_ob_eval, material_indices ? material_indices[mlooptri->poly] + 1 : 1);
tri->material_mask_bits |= ((mat && (mat->lineart.flags & LRT_MATERIAL_MASK_ENABLED)) ?
mat->lineart.material_mask_bits :
0);
@@@ -2128,9 -2120,8 +2128,9 @@@ static void lineart_geometry_object_loa
EdgeFeatData edge_feat_data = {0};
edge_feat_data.ld = la_data;
edge_feat_data.me = me;
- edge_feat_data.ob = orig_ob;
+ edge_feat_data.ob_eval = ob_info->original_ob_eval;
edge_feat_data.mlooptri = mlooptri;
+ edge_feat_data.material_indices = material_indices;
edge_feat_data.edge_nabr = lineart_build_edge_neighbor(me, total_edges);
edge_feat_data.tri_array = la_tri_arr;
edge_feat_data.v_array = la_v_arr;
More information about the Bf-blender-cvs
mailing list