[Bf-blender-cvs] [c2ec9481464] refactor-mesh-selection-generic: Merge branch 'master' into refactor-mesh-selection-generic

Hans Goudey noreply at git.blender.org
Mon Sep 5 22:09:41 CEST 2022


Commit: c2ec9481464f0e3130a2c8a60ef0882f0852f34f
Author: Hans Goudey
Date:   Mon Sep 5 13:46:57 2022 -0500
Branches: refactor-mesh-selection-generic
https://developer.blender.org/rBc2ec9481464f0e3130a2c8a60ef0882f0852f34f

Merge branch 'master' into refactor-mesh-selection-generic

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



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

diff --cc source/blender/blenkernel/intern/mesh.cc
index caeb1da57d9,c0379c50de4..348bf210706
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -253,16 -248,17 +248,22 @@@ static void mesh_blend_write(BlendWrite
    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_selection_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"});
 +      names_to_skip.add_multiple_new({".hide_vert",
 +                                      ".hide_edge",
 +                                      ".hide_poly",
 +                                      ".selection_vert",
 +                                      ".selection_edge",
 +                                      ".selection_poly"});
+ 
+       /* Set deprecated mesh data pointers for forward compatibility. */
+       mesh->mvert = const_cast<MVert *>(mesh->vertices().data());
+       mesh->medge = const_cast<MEdge *>(mesh->edges().data());
+       mesh->mpoly = const_cast<MPoly *>(mesh->polygons().data());
+       mesh->mloop = const_cast<MLoop *>(mesh->loops().data());
      }
  
      CustomData_blend_write_prepare(mesh->vdata, vert_layers, names_to_skip);
diff --cc source/blender/blenkernel/intern/mesh_evaluate.cc
index 2294cb1c4af,7e52b96cc92..cbef8e1cd64
--- a/source/blender/blenkernel/intern/mesh_evaluate.cc
+++ b/source/blender/blenkernel/intern/mesh_evaluate.cc
@@@ -878,30 -907,14 +876,30 @@@ static void mesh_flush_select_from_vert
  
  void BKE_mesh_flush_select_from_verts(Mesh *me)
  {
 -  const blender::bke::AttributeAccessor attributes = blender::bke::mesh_attributes(*me);
 +  using namespace blender::bke;
 +  MutableAttributeAccessor attributes = mesh_attributes_for_write(*me);
 +  const VArray<bool> selection_vert = attributes.lookup_or_default<bool>(
 +      ".selection_vert", ATTR_DOMAIN_POINT, false);
 +  if (selection_vert.is_single() && !selection_vert.get_internal_single()) {
 +    attributes.remove(".selection_edge");
 +    attributes.remove(".selection_poly");
 +    return;
 +  }
 +  SpanAttributeWriter<bool> selection_edge = attributes.lookup_or_add_for_write_only_span<bool>(
 +      ".selection_edge", ATTR_DOMAIN_EDGE);
 +  SpanAttributeWriter<bool> selection_poly = attributes.lookup_or_add_for_write_only_span<bool>(
 +      ".selection_poly", ATTR_DOMAIN_FACE);
    mesh_flush_select_from_verts(
-       {me->medge, me->totedge},
-       {me->mpoly, me->totpoly},
-       {me->mloop, me->totloop},
 -      me->vertices(),
++      me->edges(),
++      me->polygons(),
+       me->loops(),
        attributes.lookup_or_default<bool>(".hide_edge", ATTR_DOMAIN_EDGE, false),
        attributes.lookup_or_default<bool>(".hide_poly", ATTR_DOMAIN_FACE, false),
 -      me->edges_for_write(),
 -      me->polygons_for_write());
 +      selection_vert,
 +      selection_edge.span,
 +      selection_poly.span);
 +  selection_edge.finish();
 +  selection_poly.finish();
  }
  
  /** \} */
diff --cc source/blender/blenkernel/intern/object_deform.c
index cf93c7b72fd,4c59b4a5210..99bc1fec5bd
--- a/source/blender/blenkernel/intern/object_deform.c
+++ b/source/blender/blenkernel/intern/object_deform.c
@@@ -165,15 -162,15 +162,15 @@@ bool BKE_object_defgroup_clear(Object *
        }
      }
      else {
-       if (me->dvert) {
-         const bool *selection_vert = (const bool *)CustomData_get_layer_named(
+       if (BKE_mesh_deform_verts(me)) {
 -        const MVert *mv;
++        const const bool *selection_vert = (const bool *)CustomData_get_layer_named(
 +            &me->vdata, CD_PROP_BOOL, ".selection_vert");
          int i;
  
-         dv = me->dvert;
 -        mv = BKE_mesh_vertices(me);
+         dv = BKE_mesh_deform_verts_for_write(me);
  
 -        for (i = 0; i < me->totvert; i++, mv++, dv++) {
 -          if (dv->dw && (!use_selection || (mv->flag & SELECT))) {
 +        for (i = 0; i < me->totvert; i++, dv++) {
 +          if (dv->dw && (!use_selection || (selection_vert && selection_vert[i]))) {
              MDeformWeight *dw = BKE_defvert_find_index(dv, def_nr);
              BKE_defvert_remove_group(dv, dw); /* dw can be NULL */
              changed = true;
diff --cc source/blender/blenkernel/intern/subdiv_converter_mesh.c
index c8693123363,f908e1af4ac..aa4bfbe1517
--- a/source/blender/blenkernel/intern/subdiv_converter_mesh.c
+++ b/source/blender/blenkernel/intern/subdiv_converter_mesh.c
@@@ -205,10 -209,9 +209,10 @@@ static void precalc_uv_layer(const Open
          mesh->totloop, sizeof(int), "loop uv vertex index");
    }
    UvVertMap *uv_vert_map = BKE_mesh_uv_vert_map_create(
-       mpoly,
+       storage->polys,
        (const bool *)CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, ".hide_poly"),
 +      (const bool *)CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, ".selection_poly"),
-       mloop,
+       storage->loops,
        mloopuv,
        num_poly,
        num_vert,
diff --cc source/blender/blenkernel/intern/subdiv_mesh.cc
index 1ed01a91588,c222fc46800..400c020fb7d
--- a/source/blender/blenkernel/intern/subdiv_mesh.cc
+++ b/source/blender/blenkernel/intern/subdiv_mesh.cc
@@@ -1113,9 -1096,11 +1096,9 @@@ static void subdiv_mesh_vertex_of_loose
      subdiv_mesh_vertex_of_loose_edge_interpolate(ctx, coarse_edge, u, subdiv_vertex_index);
    }
    /* Interpolate coordinate. */
-   MVert *subdiv_vertex = &subdiv_mvert[subdiv_vertex_index];
+   MVert *subdiv_vertex = &ctx->subdiv_verts[subdiv_vertex_index];
    BKE_subdiv_mesh_interpolate_position_on_edge(
        coarse_mesh, coarse_edge, is_simple, u, subdiv_vertex->co);
 -  /* Reset flags and such. */
 -  subdiv_vertex->flag = 0;
    /* TODO(sergey): This matches old behavior, but we can as well interpolate
     * it. Maybe even using vertex varying attributes. */
    subdiv_vertex->bweight = 0.0f;
diff --cc source/blender/bmesh/intern/bmesh_mesh_convert.cc
index 884fbc189ac,0190f91250b..555c60f710d
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -1266,11 -1222,7 +1263,9 @@@ void BM_mesh_bm_to_me(Main *bmain, BMes
  
    convert_bmesh_hide_flags_to_mesh_attributes(
        *bm, need_hide_vert, need_hide_edge, need_hide_poly, *me);
 +  convert_bmesh_selection_flags_to_mesh_attributes(
 +      *bm, need_selection_vert, need_selection_edge, need_selection_poly, *me);
  
-   BKE_mesh_update_customdata_pointers(me, false);
- 
    {
      me->totselect = BLI_listbase_count(&(bm->selected));
  
diff --cc source/blender/draw/intern/draw_cache_impl_subdivision.cc
index 01522929cc7,9882ebf66f0..57879c90083
--- a/source/blender/draw/intern/draw_cache_impl_subdivision.cc
+++ b/source/blender/draw/intern/draw_cache_impl_subdivision.cc
@@@ -673,12 -675,13 +675,13 @@@ static void draw_subdiv_cache_extra_coa
                                                            Mesh *mesh,
                                                            uint32_t *flags_data)
  {
-   for (int i = 0; i < mesh->totpoly; i++) {
+   const Span<MPoly> polys = mesh->polygons();
+   for (const int i : polys.index_range()) {
      uint32_t flag = 0;
-     if ((mesh->mpoly[i].flag & ME_SMOOTH) != 0) {
+     if ((polys[i].flag & ME_SMOOTH) != 0) {
        flag |= SUBDIV_COARSE_FACE_FLAG_SMOOTH;
      }
 -    if ((polys[i].flag & ME_FACE_SEL) != 0) {
 +    if (mr->selection_poly && mr->selection_poly[i]) {
        flag |= SUBDIV_COARSE_FACE_FLAG_SELECT;
      }
      if (mr->hide_poly && mr->hide_poly[i]) {
diff --cc source/blender/editors/armature/meshlaplacian.c
index 2681707ff4f,2b3f8f4c853..1952e2ca3d4
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@@ -666,25 -669,17 +669,25 @@@ void heat_bone_weighting(Object *ob
  
      /*  (added selectedVerts content for vertex mask, they used to just equal 1) */
      if (use_vert_sel) {
 -      for (a = 0, mp = polys; a < me->totpoly; mp++, a++) {
 -        for (j = 0, ml = loops + mp->loopstart; j < mp->totloop; j++, ml++) {
 -          mask[ml->v] = (mesh_verts[ml->v].flag & SELECT) != 0;
 +      const bool *selection_vert = (const bool *)CustomData_get_layer_named(
 +          &me->vdata, CD_PROP_BOOL, ".selection_vert");
 +      if (selection_vert) {
-         for (a = 0, mp = me->mpoly; a < me->totpoly; mp++, a++) {
-           for (j = 0, ml = me->mloop + mp->loopstart; j < mp->totloop; j++, ml++) {
++        for (a = 0, mp = polys; a < me->totpoly; mp++, a++) {
++          for (j = 0, ml = loops + mp->loopstart; j < mp->totloop; j++, ml++) {
 +            mask[ml->v] = selection_vert[ml->v];
 +          }
          }
        }
      }
      else if (use_face_sel) {
 -      for (a = 0, mp = polys; a < me->totpoly; mp++, a++) {
 -        if (mp->flag & ME_FACE_SEL) {
 -          for (j = 0, ml = loops + mp->loopstart; j < mp->totloop; j++, ml++) {
 -            mask[ml->v] = 1;
 +      const bool *selection_poly = (const bool *)CustomData_get_layer_named(
 +          &me->pdata, CD_PROP_BOOL, ".selection_poly");
 +      if (selection_poly) {
-         for (a = 0, mp = me->mpoly; a < me->totpoly; mp++, a++) {
++        for (a = 0, mp = polys; a < me->totpoly; mp++, a++) {
 +          if (selection_poly[a]) {
-             for (j = 0, ml = me->mloop + mp->loopstart; j < mp->totloop; j++, ml++) {
++            for (j = 0, ml = loops + mp->loopstart; j < mp->totloop; j++, ml++) {
 +              mask[ml->v] = 1;
 +            }
            }
          }
        }
diff --cc source/blender/editors/mesh/editface.cc
index 52ff74dddcc,6313c01011e..683dd217b03
--- a/source/blender/editors/mesh/editface.cc
+++ b/source/blender/editors/mesh/editface.cc
@@@ -221,27 -206,28 +224,30 @@@ static void select_linked_tfaces_with_s
    BLI_bitmap *edge_tag = BLI_BITMAP_NEW(me->totedge, __func__);
    BLI_bitmap *poly_tag = BLI_BITMAP_NEW(me->totpoly, __func__);
  
+   const Span<MEdge> edges = me->edges();
 -  MutableSpan<MPoly

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list