[Bf-blender-cvs] [00d2f493d1b] refactor-mesh-remove-pointers: Merge branch 'refactor-mesh-hide-generic' into refactor-mesh-remove-pointers

Hans Goudey noreply at git.blender.org
Fri Jul 22 01:11:56 CEST 2022


Commit: 00d2f493d1bb1314d41f6642637a9128f2ab81d9
Author: Hans Goudey
Date:   Thu Jul 21 18:11:48 2022 -0500
Branches: refactor-mesh-remove-pointers
https://developer.blender.org/rB00d2f493d1bb1314d41f6642637a9128f2ab81d9

Merge branch 'refactor-mesh-hide-generic' into refactor-mesh-remove-pointers

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



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

diff --cc source/blender/blenkernel/intern/bvhutils.cc
index 4d861b1de28,38b33bcc43a..e802a5f08c0
--- a/source/blender/blenkernel/intern/bvhutils.cc
+++ b/source/blender/blenkernel/intern/bvhutils.cc
@@@ -28,7 -27,7 +28,8 @@@
  
  #include "MEM_guardedalloc.h"
  
 +using blender::Span;
+ using blender::VArray;
  
  /* -------------------------------------------------------------------- */
  /** \name BVHCache
@@@ -1303,57 -1277,62 +1307,62 @@@ BVHTree *BKE_bvhtree_from_mesh_get(stru
  
      case BVHTREE_FROM_FACES:
        BLI_assert(!(mesh->totface == 0 && mesh->totpoly != 0));
 +      const MFace *mfaces = (const MFace *)CustomData_get_layer(&mesh->fdata, CD_MFACE);
        data->tree = bvhtree_from_mesh_faces_create_tree(
 -          0.0f, tree_type, 6, mesh->mvert, mesh->mface, mesh->totface, nullptr, -1);
 +          0.0f, tree_type, 6, vertices.data(), mfaces, mesh->totface, nullptr, -1);
        break;
  
 -    case BVHTREE_FROM_LOOPTRI_NO_HIDDEN: {
 +    case BVHTREE_FROM_LOOPTRI_NO_HIDDEN:
-       mask = looptri_no_hidden_map_get(polygons.data(), looptri_len, &mask_bits_act_len);
+       blender::bke::AttributeAccessor attributes = blender::bke::mesh_attributes(*mesh);
+       mask = looptri_no_hidden_map_get(
 -          mesh->mpoly,
++          polygons.data(),
+           attributes.lookup_or_default(".hide_face", ATTR_DOMAIN_FACE, false),
+           looptri_len,
+           &mask_bits_act_len);
        ATTR_FALLTHROUGH;
 -    }
--    case BVHTREE_FROM_LOOPTRI:
--      data->tree = bvhtree_from_mesh_looptri_create_tree(0.0f,
--                                                         tree_type,
--                                                         6,
-                                                          vertices.data(),
-                                                          loops.data(),
 -                                                         mesh->mvert,
 -                                                         mesh->mloop,
--                                                         looptri,
--                                                         looptri_len,
--                                                         mask,
--                                                         mask_bits_act_len);
--      break;
--    case BVHTREE_FROM_EM_VERTS:
--    case BVHTREE_FROM_EM_EDGES:
--    case BVHTREE_FROM_EM_LOOPTRI:
--    case BVHTREE_MAX_ITEM:
--      BLI_assert(false);
--      break;
    }
++  case BVHTREE_FROM_LOOPTRI:
++    data->tree = bvhtree_from_mesh_looptri_create_tree(0.0f,
++                                                       tree_type,
++                                                       6,
++                                                       vertices.data(),
++                                                       loops.data(),
++                                                       looptri,
++                                                       looptri_len,
++                                                       mask,
++                                                       mask_bits_act_len);
++    break;
++  case BVHTREE_FROM_EM_VERTS:
++  case BVHTREE_FROM_EM_EDGES:
++  case BVHTREE_FROM_EM_LOOPTRI:
++  case BVHTREE_MAX_ITEM:
++    BLI_assert(false);
++    break;
++}
  
--  if (mask != nullptr) {
--    MEM_freeN(mask);
--  }
++if (mask != nullptr) {
++  MEM_freeN(mask);
++}
  
--  bvhtree_balance(data->tree, lock_started);
++bvhtree_balance(data->tree, lock_started);
  
--  /* Save on cache for later use */
--  // printf("BVHTree built and saved on cache\n");
--  BLI_assert(data->cached == false);
--  data->cached = true;
--  bvhcache_insert(*bvh_cache_p, data->tree, bvh_cache_type);
--  bvhcache_unlock(*bvh_cache_p, lock_started);
++/* Save on cache for later use */
++// printf("BVHTree built and saved on cache\n");
++BLI_assert(data->cached == false);
++data->cached = true;
++bvhcache_insert(*bvh_cache_p, data->tree, bvh_cache_type);
++bvhcache_unlock(*bvh_cache_p, lock_started);
  
  #ifdef DEBUG
--  if (data->tree != nullptr) {
--    if (BLI_bvhtree_get_tree_type(data->tree) != tree_type) {
--      printf("tree_type %d obtained instead of %d\n",
--             BLI_bvhtree_get_tree_type(data->tree),
--             tree_type);
--    }
++if (data->tree != nullptr) {
++  if (BLI_bvhtree_get_tree_type(data->tree) != tree_type) {
++    printf(
++        "tree_type %d obtained instead of %d\n", BLI_bvhtree_get_tree_type(data->tree), tree_type);
    }
++}
  #endif
  
--  return data->tree;
++return data->tree;
  }
  
  BVHTree *BKE_bvhtree_from_editmesh_get(BVHTreeFromEditMesh *data,
diff --cc source/blender/blenkernel/intern/subdiv_converter_mesh.c
index 1c0fe096e29,557f6a04761..2761af02271
--- a/source/blender/blenkernel/intern/subdiv_converter_mesh.c
+++ b/source/blender/blenkernel/intern/subdiv_converter_mesh.c
@@@ -208,7 -205,15 +208,15 @@@ 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(
-       storage->polygons, storage->loops, mloopuv, num_poly, num_vert, limit, false, true);
 -      mpoly,
++      storage->polygons,
+       (const bool *)CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, ".hide_face"),
 -      mloop,
++      storage->loops,
+       mloopuv,
+       num_poly,
+       num_vert,
+       limit,
+       false,
+       true);
    /* NOTE: First UV vertex is supposed to be always marked as separate. */
    storage->num_uv_coordinates = -1;
    for (int vertex_index = 0; vertex_index < num_vert; vertex_index++) {
diff --cc source/blender/bmesh/intern/bmesh_mesh_convert.cc
index 4c57fc57faa,82ac4246486..fa0104b42c7
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -353,7 -356,14 +356,13 @@@ void BM_mesh_bm_from_me(BMesh *bm, cons
                                             CustomData_get_offset(&bm->vdata, CD_SHAPE_KEYINDEX) :
                                             -1;
  
 +  const Span<MVert> mvert = blender::bke::mesh_vertices(*me);
+   const bool *hide_vert = (const bool *)CustomData_get_layer_named(
+       &me->vdata, CD_PROP_BOOL, ".hide_vert");
+   const bool *hide_edge = (const bool *)CustomData_get_layer_named(
+       &me->edata, CD_PROP_BOOL, ".hide_edge");
+   const bool *hide_face = (const bool *)CustomData_get_layer_named(
+       &me->pdata, CD_PROP_BOOL, ".hide_face");
 -
 -  Span<MVert> mvert{me->mvert, me->totvert};
    Array<BMVert *> vtable(me->totvert);
    for (const int i : mvert.index_range()) {
      BMVert *v = vtable[i] = BM_vert_create(
@@@ -1115,6 -1203,11 +1199,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_face, *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 54377ca8ce6,bfb31379bdc..04b94e0808b
--- a/source/blender/draw/intern/draw_cache_impl_subdivision.cc
+++ b/source/blender/draw/intern/draw_cache_impl_subdivision.cc
@@@ -670,21 -668,22 +670,23 @@@ static void draw_subdiv_cache_extra_coa
    }
  }
  
- static void draw_subdiv_cache_extra_coarse_face_data_mesh(Mesh *mesh, uint32_t *flags_data)
+ static void draw_subdiv_cache_extra_coarse_face_data_mesh(const MeshRenderData *mr,
+                                                           Mesh *mesh,
+                                                           uint32_t *flags_data)
  {
 -  for (int i = 0; i < mesh->totpoly; i++) {
 +  const Span<MPoly> polygons = blender::bke::mesh_polygons(*mesh);
 +  for (const int i : polygons.index_range()) {
      uint32_t flag = 0;
 -    if ((mesh->mpoly[i].flag & ME_SMOOTH) != 0) {
 +    if ((polygons[i].flag & ME_SMOOTH) != 0) {
        flag |= SUBDIV_COARSE_FACE_FLAG_SMOOTH;
      }
 -    if ((mesh->mpoly[i].flag & ME_FACE_SEL) != 0) {
 +    if ((polygons[i].flag & ME_FACE_SEL) != 0) {
        flag |= SUBDIV_COARSE_FACE_FLAG_SELECT;
      }
-     if ((polygons[i].flag & ME_HIDE) != 0) {
+     if (mr->hide_face && mr->hide_face[i]) {
        flag |= SUBDIV_COARSE_FACE_FLAG_HIDDEN;
      }
 -    flags_data[i] = (uint)(mesh->mpoly[i].loopstart) | (flag << SUBDIV_COARSE_FACE_FLAG_OFFSET);
 +    flags_data[i] = (uint)(polygons[i].loopstart) | (flag << SUBDIV_COARSE_FACE_FLAG_OFFSET);
    }
  }
  
diff --cc source/blender/editors/object/object_vgroup.c
index 0650dabb6ee,4bba316d48b..c49ae862485
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@@ -1036,17 -1033,17 +1036,18 @@@ static void vgroup_select_verts(Object 
        }
      }
      else {
 -      if (me->dvert) {
 +      MDeformVert *dvert = (MDeformVert *)CustomData_get_layer(&me->vdata, CD_MDEFORMVERT);
 +      if (dvert) {
+         const bool *hide_vert = CustomData_get_layer_named(&me->vdata, CD_PROP_BOOL, ".hide_vert");
          MVert *mv;
          MDeformVert *dv;
          int i;
  
 -        mv = me->mvert;
 -        dv = me->dvert;
 +        mv = BKE_mesh_vertices_for_write(me);
 +        dv = dvert;
  
          for (i = 0; i < me->totvert; i++, mv++, dv++) {
-           if (!(mv->flag & ME_HIDE)) {
+           if (hide_vert != NULL && !hide_vert[i]) {
              if (BKE_defvert_find_index(dv, def_nr)) {
                if (select) {
                  mv->flag |= SELECT;
@@@ -1959,15 -1956,13 +1964,15 @@@ static void vgroup_smooth_subset(Objec
      }
    }
    else {
 +    const MVert *vertices = BKE_mesh_vertices(me);
 +    const MEdge *edges = BKE_mesh_edges(me);
      for (int i = 0; i < dvert_tot; i++) {
 -      const MVert *v = &me->mvert[i];
 +      const MVert *v = &vertices[i];
        if (IS_ME_VERT_WRITE(v)) {
          for (int j = 0; j < emap[i].count; j++) {
 -          const MEdge *e = &me->medge[emap[i].indices[j]];
 +          const MEdge *e = &edges[emap[i].indices[j]];
-           const MVert *v_other = &vertices[(e->v1 == i) ? e->v2 : e->v1];
-           if (IS_ME_VERT_READ(v_other)) {
+           const int i_other = (e->v1 == i) ? e->v2

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list