[Bf-blender-cvs] [794819a45d7] refactor-mesh-hide-generic: Fixes, cleanup, renaming
Hans Goudey
noreply at git.blender.org
Fri Jul 8 22:31:28 CEST 2022
Commit: 794819a45d74dcc071ee12a72e8339799e8f7619
Author: Hans Goudey
Date: Fri Jul 8 15:31:18 2022 -0500
Branches: refactor-mesh-hide-generic
https://developer.blender.org/rB794819a45d74dcc071ee12a72e8339799e8f7619
Fixes, cleanup, renaming
===================================================================
M source/blender/blenkernel/BKE_mesh_legacy_convert.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.cc
M source/blender/blenkernel/intern/mesh_evaluate.cc
M source/blender/blenkernel/intern/mesh_legacy_convert.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/bmesh/intern/bmesh_mesh_convert.cc
M source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc
M source/blender/draw/intern/draw_cache_impl_subdivision.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh.hh
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.cc
M source/blender/editors/mesh/editmesh_undo.c
M source/blender/editors/mesh/meshtools.cc
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/makesrna/intern/rna_mesh.c
M source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_mesh_legacy_convert.h b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
index 909fd0e0dea..6b625e8a6b5 100644
--- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h
+++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
@@ -17,6 +17,8 @@ struct CustomData;
struct Mesh;
struct MFace;
+void BKE_mesh_legacy_convert_hide_layers_to_flags(struct Mesh *mesh);
+
/**
* Recreate #MFace Tessellation.
*
diff --git a/source/blender/blenkernel/BKE_mesh_mapping.h b/source/blender/blenkernel/BKE_mesh_mapping.h
index e8e6ce19556..b78afa40203 100644
--- a/source/blender/blenkernel/BKE_mesh_mapping.h
+++ b/source/blender/blenkernel/BKE_mesh_mapping.h
@@ -79,7 +79,7 @@ typedef struct MeshElemMap {
/* mapping */
UvVertMap *BKE_mesh_uv_vert_map_create(const struct MPoly *mpoly,
- const bool *face_hide,
+ const bool *hide_face,
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 34691bcc5f7..c706a86c6c8 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -207,7 +207,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 bool *vert_hide,
+ const bool *hide_vert,
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 e625ec25381..70c64744db0 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -413,7 +413,7 @@ typedef struct PBVHVertexIter {
/* mesh */
struct MVert *mverts;
float (*vert_normals)[3];
- const bool *vert_hide;
+ const bool *hide_vert;
int totvert;
const int *vert_indices;
float *vmask;
@@ -473,7 +473,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.vert_hide && vi.vert_hide[vi.vert_indices[vi.gx]]); \
+ vi.visible = !(vi.hide_vert && vi.hide_vert[vi.vert_indices[vi.gx]]); \
if (mode == PBVH_ITER_UNIQUE && !vi.visible) { \
continue; \
} \
diff --git a/source/blender/blenkernel/intern/bvhutils.cc b/source/blender/blenkernel/intern/bvhutils.cc
index 32db942784b..e032274816b 100644
--- a/source/blender/blenkernel/intern/bvhutils.cc
+++ b/source/blender/blenkernel/intern/bvhutils.cc
@@ -19,10 +19,9 @@
#include "BLI_threads.h"
#include "BLI_utildefines.h"
+#include "BKE_attribute.hh"
#include "BKE_bvhutils.h"
-#include "BKE_customdata.h"
#include "BKE_editmesh.h"
-#include "BKE_geometry_set.hh"
#include "BKE_mesh.h"
#include "BKE_mesh_runtime.h"
@@ -1184,11 +1183,11 @@ static BLI_bitmap *loose_edges_map_get(const MEdge *medge,
}
static BLI_bitmap *looptri_no_hidden_map_get(const MPoly *mpoly,
- const VArray<bool> &face_hide,
+ const VArray<bool> &hide_face,
const int looptri_len,
int *r_looptri_active_len)
{
- if (face_hide.is_single() && !face_hide.get_internal_single()) {
+ if (hide_face.is_single() && !hide_face.get_internal_single()) {
return nullptr;
}
BLI_bitmap *looptri_mask = BLI_BITMAP_NEW(looptri_len, __func__);
@@ -1198,7 +1197,7 @@ static BLI_bitmap *looptri_no_hidden_map_get(const MPoly *mpoly,
int i_poly = 0;
while (looptri_iter != looptri_len) {
int mp_totlooptri = mpoly[i_poly].totloop - 2;
- if (face_hide[i_poly]) {
+ if (hide_face[i_poly]) {
looptri_iter += mp_totlooptri;
}
else {
@@ -1283,12 +1282,10 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
break;
case BVHTREE_FROM_LOOPTRI_NO_HIDDEN: {
- MeshComponent component;
- component.replace(const_cast<Mesh *>(mesh), GeometryOwnershipType::ReadOnly);
-
+ blender::bke::AttributeAccessor attributes = blender::bke::mesh_attributes(*mesh);
mask = looptri_no_hidden_map_get(
mesh->mpoly,
- component.attribute_get_for_read<bool>(".hide_face", ATTR_DOMAIN_FACE, false),
+ attributes.lookup_or_default(".hide_face", ATTR_DOMAIN_FACE, false),
looptri_len,
&mask_bits_act_len);
ATTR_FALLTHROUGH;
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index 706aa349dfe..debf9988d89 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -37,10 +37,10 @@
#include "BLT_translation.h"
#include "BKE_anim_data.h"
+#include "BKE_attribute.hh"
#include "BKE_bpath.h"
#include "BKE_deform.h"
#include "BKE_editmesh.h"
-#include "BKE_geometry_set.hh"
#include "BKE_global.h"
#include "BKE_idtype.h"
#include "BKE_key.h"
@@ -210,33 +210,6 @@ static void mesh_foreach_path(ID *id, BPathForeachPathData *bpath_data)
}
}
-static void prepare_legacy_hide_data_for_writing(Mesh &mesh)
-{
- MeshComponent component;
- component.replace(&mesh, GeometryOwnershipType::ReadOnly);
-
- MutableSpan<MVert> verts(mesh.mvert, mesh.totvert);
- const VArray<bool> vert_hide = component.attribute_get_for_read<bool>(
- ".hide_vert", ATTR_DOMAIN_POINT, false);
- for (const int i : verts.index_range()) {
- SET_FLAG_FROM_TEST(verts[i].flag, vert_hide[i], ME_HIDE);
- }
-
- MutableSpan<MEdge> edges(mesh.medge, mesh.totedge);
- const VArray<bool> edge_hide = component.attribute_get_for_read<bool>(
- ".hide_edge", ATTR_DOMAIN_EDGE, false);
- for (const int i : edges.index_range()) {
- SET_FLAG_FROM_TEST(edges[i].flag, edge_hide[i], ME_HIDE);
- }
-
- MutableSpan<MPoly> polys(mesh.mpoly, mesh.totpoly);
- const VArray<bool> poly_hide = component.attribute_get_for_read<bool>(
- ".hide_face", ATTR_DOMAIN_FACE, false);
- for (const int i : polys.index_range()) {
- SET_FLAG_FROM_TEST(polys[i].flag, poly_hide[i], ME_HIDE);
- }
-}
-
static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address)
{
Mesh *mesh = (Mesh *)id;
@@ -279,7 +252,7 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address
}
if (BLO_write_use_legacy_mesh_format(writer)) {
- prepare_legacy_hide_data_for_writing(*mesh);
+ BKE_mesh_legacy_convert_hide_layers_to_flags(mesh);
}
BLO_write_id_struct(writer, Mesh, id_address, &mesh->id);
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.cc b/source/blender/blenkernel/intern/mesh_evaluate.cc
index 7c7c4282ecc..5f55213e259 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.cc
+++ b/source/blender/blenkernel/intern/mesh_evaluate.cc
@@ -22,18 +22,17 @@
#include "BLI_math.h"
#include "BLI_span.hh"
#include "BLI_utildefines.h"
+#include "BLI_virtual_array.hh"
#include "BKE_customdata.h"
-#include "BKE_geometry_set.hh"
+#include "BKE_attribute.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
@@ -737,54 +736,87 @@ void BKE_mesh_polygons_flip(MPoly *mpoly, MLoop *mloop, CustomData *ldata, int t
void BKE_mesh_flush_hidden_from_verts(Mesh *me)
{
- MeshComponent component;
- component.replace(me, GeometryOwnershipType::Editable);
+ using namespace blender;
+ using namespace blender::bke;
+ MutableAttributeAccessor attributes = mesh_attributes_for_write(*me);
- const VArray<bool> vert_hide = component.attribute_get_for_read<bool>(
+ const VArray<bool> hide_vert = attributes.lookup_or_default<bool>(
".hide_vert", ATTR_DOMAIN_POINT, false);
- if (vert_hide.is_single() && !vert_hide.get_internal_single()) {
- component.attribute_try_delete(".hide_edge");
- component.attribute_try_delete(".hide_face");
+ if (hide_vert.is_single() && !hide_vert.get_internal_single()) {
+ attributes.remove(".hide_edge");
+ attributes.remove(".hide_face");
return;
}
+ const VArraySpan<bool> hide_vert_span{hide_vert};
+ const Span<MEdge> edges(me->medge, me->totedge);
+ const Span<MPoly> polys(me->mpoly, me->totpoly);
+ const Span<MLoop> loops(me->mloop, me->totloop);
- OutputAttribute_Typed<bool> edge_hide = component.attribute_try_get_for_output_only<bool>(
+ /* Hide edges when both of their vertices are hidden. */
+ SpanAttributeWriter<bool> hide_edge = attributes.lookup_or_add_for_write_only_span<bool>(
".hide_edge", ATTR_DOMAIN_EDGE);
- component.attribute_try_adapt_domain(vert_hide, ATTR_DOMAIN_POINT, ATTR_DOMAIN_EDGE)
- .materialize(edge_hide.as_span());
- edge_hide.save();
+ for (const int i : edges.index_range()) {
+ const MEdge &edge = edges[i];
+ hide_edge.span[i] = hide_vert_span[edge.v1] && hide_vert_span[edge.v2];
+ }
+ hide_edge.finish();
- OutputAttribute_Typed<bool> face_hide = component.attribute_try_get_for_output_only<bool>(
+ /* Hide faces when any of their vertices are hidden. */
+ SpanAttributeWriter<bool> hide_face = attributes.lookup_or_add_for_write_only_span<bool>(
".hide_face", ATTR_DOMAIN_FACE);
- component.attribute_try_adapt_domain(vert_hide, ATTR_DOMAIN_POINT, ATTR_DOMAIN_FACE)
- .materialize(face_hide.as_span());
- face_hide.save();
+ for (const int i : polys.index_range()) {
+ const MPoly &poly = polys[i];
+ const Span<MLoop> loops = loops.slice(poly.loopstart, poly.totloop);
+ hide_face.span[i] = std::any_of(
+ loops.begin(
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list