[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