[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