[Bf-blender-cvs] [27edf51d2eb] refactor-mesh-hide-generic: Refactor: Move mesh hide flags to generic data types (WIP)
Hans Goudey
noreply at git.blender.org
Sun May 15 12:28:33 CEST 2022
Commit: 27edf51d2eb230171b253f43002d574f66577c22
Author: Hans Goudey
Date: Sun May 15 12:28:30 2022 +0200
Branches: refactor-mesh-hide-generic
https://developer.blender.org/rB27edf51d2eb230171b253f43002d574f66577c22
Refactor: Move mesh hide flags to generic data types (WIP)
===================================================================
M source/blender/blenkernel/BKE_mesh.h
M source/blender/blenkernel/BKE_mesh_mapping.h
M source/blender/blenkernel/BKE_paint.h
M source/blender/blenkernel/BKE_pbvh.h
M source/blender/blenkernel/intern/bvhutils.cc
M source/blender/blenkernel/intern/mesh_evaluate.cc
M source/blender/blenkernel/intern/mesh_mapping.c
M source/blender/blenkernel/intern/paint.c
M source/blender/blenkernel/intern/pbvh.c
M source/blender/blenkernel/intern/pbvh_intern.h
M source/blender/blenkernel/intern/subdiv_converter_mesh.c
M source/blender/blenkernel/intern/subsurf_ccg.c
M source/blender/bmesh/intern/bmesh_construct.c
M source/blender/bmesh/intern/bmesh_mesh_convert.cc
M source/blender/draw/intern/draw_cache_extract_mesh_render_data.c
M source/blender/draw/intern/mesh_extractors/extract_mesh.h
M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_lnor.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc
M source/blender/editors/include/ED_mesh.h
M source/blender/editors/mesh/editface.c
M source/blender/editors/mesh/meshtools.c
M source/blender/editors/object/object_vgroup.c
M source/blender/editors/sculpt_paint/paint_hide.c
M source/blender/editors/sculpt_paint/sculpt.c
M source/blender/editors/sculpt_paint/sculpt_dyntopo.c
M source/blender/editors/sculpt_paint/sculpt_undo.c
M source/blender/editors/space_view3d/view3d_iterators.c
M source/blender/editors/space_view3d/view3d_select.c
M source/blender/gpu/GPU_buffers.h
M source/blender/gpu/intern/gpu_buffers.c
M source/blender/gpu/intern/gpu_shader_builder_stubs.cc
M source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
M source/blender/makesdna/DNA_meshdata_types.h
M source/blender/makesrna/intern/rna_mesh.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 3e06a9d9e9c..d0a93586813 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -907,19 +907,7 @@ void BKE_mesh_merge_customdata_for_apply_modifier(struct Mesh *me);
/**
* Update the hide flag for edges and faces from the corresponding flag in verts.
*/
-void BKE_mesh_flush_hidden_from_verts_ex(const struct MVert *mvert,
- const struct MLoop *mloop,
- struct MEdge *medge,
- int totedge,
- struct MPoly *mpoly,
- int totpoly);
void BKE_mesh_flush_hidden_from_verts(struct Mesh *me);
-void BKE_mesh_flush_hidden_from_polys_ex(struct MVert *mvert,
- const struct MLoop *mloop,
- struct MEdge *medge,
- int totedge,
- const struct MPoly *mpoly,
- int totpoly);
void BKE_mesh_flush_hidden_from_polys(struct Mesh *me);
/**
* simple poly -> vert/edge selection.
@@ -932,13 +920,6 @@ void BKE_mesh_flush_select_from_polys_ex(struct MVert *mvert,
const struct MPoly *mpoly,
int totpoly);
void BKE_mesh_flush_select_from_polys(struct Mesh *me);
-void BKE_mesh_flush_select_from_verts_ex(const struct MVert *mvert,
- int totvert,
- const struct MLoop *mloop,
- struct MEdge *medge,
- int totedge,
- struct MPoly *mpoly,
- int totpoly);
void BKE_mesh_flush_select_from_verts(struct Mesh *me);
/* spatial evaluation */
diff --git a/source/blender/blenkernel/BKE_mesh_mapping.h b/source/blender/blenkernel/BKE_mesh_mapping.h
index 163acf062e0..e8e6ce19556 100644
--- a/source/blender/blenkernel/BKE_mesh_mapping.h
+++ b/source/blender/blenkernel/BKE_mesh_mapping.h
@@ -79,6 +79,7 @@ typedef struct MeshElemMap {
/* mapping */
UvVertMap *BKE_mesh_uv_vert_map_create(const struct MPoly *mpoly,
+ const bool *face_hide,
const struct MLoop *mloop,
const struct MLoopUV *mloopuv,
unsigned int totpoly,
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 03cbcf575c3..a3baacd2276 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -206,7 +206,7 @@ bool BKE_paint_select_elem_test(struct Object *ob);
* Returns non-zero if any of the face's vertices are hidden, zero otherwise.
*/
bool paint_is_face_hidden(const struct MLoopTri *lt,
- const struct MVert *mvert,
+ const bool *vert_hide,
const struct MLoop *mloop);
/**
* Returns non-zero if any of the corners of the grid
diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index 291b9b6b778..5afc224b172 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -412,6 +412,7 @@ typedef struct PBVHVertexIter {
/* mesh */
struct MVert *mverts;
float (*vert_normals)[3];
+ const bool *vert_hide;
int totvert;
const int *vert_indices;
float *vmask;
@@ -471,7 +472,7 @@ void pbvh_vertex_iter_init(PBVH *pbvh, PBVHNode *node, PBVHVertexIter *vi, int m
else if (vi.mverts) { \
vi.mvert = &vi.mverts[vi.vert_indices[vi.gx]]; \
if (vi.respect_hide) { \
- vi.visible = !(vi.mvert->flag & ME_HIDE); \
+ vi.visible = !(vi.vert_hide && vi.vert_hide[vi.vert_indices[vi.gx]]); \
if (mode == PBVH_ITER_UNIQUE && !vi.visible) { \
continue; \
} \
@@ -544,6 +545,8 @@ void BKE_pbvh_parallel_range_settings(struct TaskParallelSettings *settings,
struct MVert *BKE_pbvh_get_verts(const PBVH *pbvh);
const float (*BKE_pbvh_get_vert_normals(const PBVH *pbvh))[3];
+const bool *BKE_pbvh_get_vert_hide(const PBVH *pbvh);
+bool *BKE_pbvh_get_vert_hide_for_write(PBVH *pbvh);
PBVHColorBufferNode *BKE_pbvh_node_color_buffer_get(PBVHNode *node);
void BKE_pbvh_node_color_buffer_free(PBVH *pbvh);
diff --git a/source/blender/blenkernel/intern/bvhutils.cc b/source/blender/blenkernel/intern/bvhutils.cc
index 37b0875db67..10dd310bd89 100644
--- a/source/blender/blenkernel/intern/bvhutils.cc
+++ b/source/blender/blenkernel/intern/bvhutils.cc
@@ -20,6 +20,7 @@
#include "BLI_utildefines.h"
#include "BKE_bvhutils.h"
+#include "BKE_customdata.h"
#include "BKE_editmesh.h"
#include "BKE_mesh.h"
#include "BKE_mesh_runtime.h"
@@ -1205,6 +1206,7 @@ static BLI_bitmap *loose_edges_map_get(const MEdge *medge,
}
static BLI_bitmap *looptri_no_hidden_map_get(const MPoly *mpoly,
+ const bool *face_hide,
const int looptri_len,
int *r_looptri_active_len)
{
@@ -1212,10 +1214,10 @@ static BLI_bitmap *looptri_no_hidden_map_get(const MPoly *mpoly,
int looptri_no_hidden_len = 0;
int looptri_iter = 0;
- const MPoly *mp = mpoly;
+ int poly_index = 0;
while (looptri_iter != looptri_len) {
- int mp_totlooptri = mp->totloop - 2;
- if (mp->flag & ME_HIDE) {
+ int mp_totlooptri = mpoly[poly_index].totloop - 2;
+ if (face_hide && face_hide[poly_index]) {
looptri_iter += mp_totlooptri;
}
else {
@@ -1225,7 +1227,7 @@ static BLI_bitmap *looptri_no_hidden_map_get(const MPoly *mpoly,
looptri_no_hidden_len++;
}
}
- mp++;
+ poly_index++;
}
*r_looptri_active_len = looptri_no_hidden_len;
@@ -1300,7 +1302,11 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
break;
case BVHTREE_FROM_LOOPTRI_NO_HIDDEN:
- mask = looptri_no_hidden_map_get(mesh->mpoly, looptri_len, &mask_bits_act_len);
+ mask = looptri_no_hidden_map_get(
+ mesh->mpoly,
+ (const bool *)CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, ".face_hide"),
+ looptri_len,
+ &mask_bits_act_len);
ATTR_FALLTHROUGH;
case BVHTREE_FROM_LOOPTRI:
data->tree = bvhtree_from_mesh_looptri_create_tree(0.0f,
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.cc b/source/blender/blenkernel/intern/mesh_evaluate.cc
index 30b1e580b29..94cce18082c 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.cc
+++ b/source/blender/blenkernel/intern/mesh_evaluate.cc
@@ -18,15 +18,23 @@
#include "BLI_alloca.h"
#include "BLI_bitmap.h"
#include "BLI_edgehash.h"
-
+#include "BLI_index_range.hh"
#include "BLI_math.h"
+#include "BLI_span.hh"
#include "BLI_utildefines.h"
#include "BKE_customdata.h"
+#include "BKE_geometry_set.hh"
#include "BKE_mesh.h"
#include "BKE_multires.h"
+using blender::IndexRange;
+using blender::MutableSpan;
+using blender::Span;
+using blender::VArray;
+using blender::bke::OutputAttribute_Typed;
+
/* -------------------------------------------------------------------- */
/** \name Polygon Calculations
* \{ */
@@ -999,75 +1007,46 @@ void BKE_mesh_polygons_flip(MPoly *mpoly, MLoop *mloop, CustomData *ldata, int t
/** \name Mesh Flag Flushing
* \{ */
-void BKE_mesh_flush_hidden_from_verts_ex(const MVert *mvert,
- const MLoop *mloop,
- MEdge *medge,
- const int totedge,
- MPoly *mpoly,
- const int totpoly)
-{
- int i, j;
-
- for (i = 0; i < totedge; i++) {
- MEdge *e = &medge[i];
- if (mvert[e->v1].flag & ME_HIDE || mvert[e->v2].flag & ME_HIDE) {
- e->flag |= ME_HIDE;
- }
- else {
- e->flag &= ~ME_HIDE;
- }
- }
- for (i = 0; i < totpoly; i++) {
- MPoly *p = &mpoly[i];
- p->flag &= (char)~ME_HIDE;
- for (j = 0; j < p->totloop; j++) {
- if (mvert[mloop[p->loopstart + j].v].flag & ME_HIDE) {
- p->flag |= ME_HIDE;
- }
- }
- }
-}
void BKE_mesh_flush_hidden_from_verts(Mesh *me)
{
- BKE_mesh_flush_hidden_from_verts_ex(
- me->mvert, me->mloop, me->medge, me->totedge, me->mpoly, me->totpoly);
+ MeshComponent component;
+ component.replace(me, GeometryOwnershipType::Editable);
+
+ VArray<bool> vert_hide = component.attribute_get_for_read<bool>(
+ ".vert_hide", ATTR_DOMAIN_POINT, false);
+
+ OutputAttribute_Typed<bool> edge_hide = component.attribute_try_get_for_output_only<bool>(
+ ".edge_hide", ATTR_DOMAIN_EDGE);
+ component.attribute_try_adapt_domain(vert_hide, ATTR_DOMAIN_POINT, ATTR_DOMAIN_EDGE)
+ .materialize(edge_hide.as_span());
+ edge_hide.save();
+
+ OutputAttribute_Typed<bool> face_hide = component.attribute_try_get_for_output_only<bool>(
+ ".face_hide", ATTR_DOMAIN_FACE);
+ component.attribute_try_adapt_domain(vert_hide, ATTR_DOMAIN_POINT, ATTR_DOMAIN_FACE)
+ .materialize(face_hide.as_span());
+ face_hide.save();
}
-void BKE_mesh_flush_hidden_from_polys_ex(MVert *mvert,
- const MLoop *mloop,
- MEdge *medge,
- const int UNUSED(totedge),
- const MPoly *mpoly,
- const int totpoly)
-{
- int i = totpoly;
- for (const MPoly *mp = mpoly; i--; mp++) {
- if (mp->flag & ME_HIDE) {
- const MLoop *ml;
- int j = mp->totloop;
- for (ml = &mloop[mp->loopstart]; j--; ml++) {
- mvert[ml->v].flag |= ME_HIDE;
- medge[ml->e].flag |= ME_HIDE;
- }
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list