[Bf-blender-cvs] [997ad445baf] refactor-mesh-face-generic: Move some PBVH code to use offset indices for polygons
Hans Goudey
noreply at git.blender.org
Mon Feb 6 14:39:50 CET 2023
Commit: 997ad445baf64cb19c1432c53ab7d98e7d1d79b4
Author: Hans Goudey
Date: Mon Feb 6 08:39:42 2023 -0500
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB997ad445baf64cb19c1432c53ab7d98e7d1d79b4
Move some PBVH code to use offset indices for polygons
===================================================================
M source/blender/blenkernel/BKE_pbvh.h
M source/blender/blenkernel/intern/paint.cc
M source/blender/blenkernel/intern/pbvh.cc
M source/blender/blenkernel/intern/pbvh_intern.hh
===================================================================
diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index 9d4f8290dfe..b19fa025b00 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -278,6 +278,9 @@ typedef void (*BKE_pbvh_SearchNearestCallback)(PBVHNode *node, void *data, float
/* Building */
PBVH *BKE_pbvh_new(PBVHType type);
+
+#ifdef __cplusplus
+
/**
* Do a full rebuild with on Mesh data structure.
*
@@ -286,7 +289,7 @@ PBVH *BKE_pbvh_new(PBVHType type);
*/
void BKE_pbvh_build_mesh(PBVH *pbvh,
struct Mesh *mesh,
- const int *poly_offsets,
+ blender::OffsetIndices<int> polys,
const int *corner_verts,
float (*vert_positions)[3],
int totvert,
@@ -295,6 +298,9 @@ void BKE_pbvh_build_mesh(PBVH *pbvh,
struct CustomData *pdata,
const struct MLoopTri *looptri,
int looptri_num);
+
+#endif
+
/**
* Do a full rebuild with on Grids data structure.
*/
@@ -307,6 +313,7 @@ void BKE_pbvh_build_grids(PBVH *pbvh,
unsigned int **grid_hidden,
struct Mesh *me,
struct SubdivCCG *subdiv_ccg);
+
/**
* Build a PBVH from a BMesh.
*/
diff --git a/source/blender/blenkernel/intern/paint.cc b/source/blender/blenkernel/intern/paint.cc
index f16659ce43e..3b1c24a6e66 100644
--- a/source/blender/blenkernel/intern/paint.cc
+++ b/source/blender/blenkernel/intern/paint.cc
@@ -2180,7 +2180,7 @@ static PBVH *build_pbvh_from_regular_mesh(Object *ob, Mesh *me_eval_deform, bool
BKE_pbvh_respect_hide_set(pbvh, respect_hide);
MutableSpan<float3> positions = me->vert_positions_for_write();
- const OffsetIndices polys = me->polys();
+ const blender::OffsetIndices polys = me->polys();
const Span<int> corner_verts = me->corner_verts();
MLoopTri *looptri = static_cast<MLoopTri *>(
@@ -2195,7 +2195,7 @@ static PBVH *build_pbvh_from_regular_mesh(Object *ob, Mesh *me_eval_deform, bool
BKE_pbvh_build_mesh(pbvh,
me,
- polys.data(),
+ polys,
corner_verts.data(),
reinterpret_cast<float(*)[3]>(positions.data()),
me->totvert,
diff --git a/source/blender/blenkernel/intern/pbvh.cc b/source/blender/blenkernel/intern/pbvh.cc
index ca0e5a09d83..5f615127267 100644
--- a/source/blender/blenkernel/intern/pbvh.cc
+++ b/source/blender/blenkernel/intern/pbvh.cc
@@ -823,7 +823,7 @@ static void pbvh_validate_node_prims(PBVH *pbvh)
void BKE_pbvh_build_mesh(PBVH *pbvh,
Mesh *mesh,
- const int *poly_offsets,
+ const blender::OffsetIndices<int> polys,
const int *corner_verts,
float (*vert_positions)[3],
int totvert,
@@ -838,7 +838,7 @@ void BKE_pbvh_build_mesh(PBVH *pbvh,
pbvh->mesh = mesh;
pbvh->header.type = PBVH_FACES;
- pbvh->poly_offsets = poly_offsets;
+ pbvh->polys = polys;
pbvh->hide_poly = static_cast<bool *>(CustomData_get_layer_named_for_write(
&mesh->pdata, CD_PROP_BOOL, ".hide_poly", mesh->totpoly));
pbvh->material_indices = static_cast<const int *>(
@@ -938,10 +938,10 @@ void BKE_pbvh_build_grids(PBVH *pbvh,
/* Find maximum number of grids per face. */
int max_grids = 1;
- const int *poly_offsets = BKE_mesh_poly_offsets(me);
+ const blender::OffsetIndices polys = me->polys();
for (int i = 0; i < me->totpoly; i++) {
- max_grids = max_ii(max_grids, poly_offsets[i].totloop);
+ max_grids = max_ii(max_grids, polys[i].size());
}
/* Ensure leaf limit is at least 4 so there's room
@@ -955,7 +955,7 @@ void BKE_pbvh_build_grids(PBVH *pbvh,
pbvh->ldata = &me->ldata;
pbvh->pdata = &me->pdata;
- pbvh->poly_offsets = poly_offsets;
+ pbvh->polys = polys;
pbvh->corner_verts = BKE_mesh_corner_verts(me);
/* We also need the base mesh for PBVH draw. */
@@ -1427,9 +1427,9 @@ static void pbvh_update_normals_accum_task_cb(void *__restrict userdata,
/* Face normal and mask */
if (lt->poly != mpoly_prev) {
- const MPoly *mp = &pbvh->mpoly[lt->poly];
+ const blender::IndexRange poly = pbvh->polys[lt->poly];
BKE_mesh_calc_poly_normal(
- mp, &pbvh->corner_verts[mp->loopstart], pbvh->vert_positions, fn);
+ {&pbvh->corner_verts[poly.start()], poly.size()}, pbvh->vert_positions, fn);
mpoly_prev = lt->poly;
}
diff --git a/source/blender/blenkernel/intern/pbvh_intern.hh b/source/blender/blenkernel/intern/pbvh_intern.hh
index 882b5592a42..9e4f2c5bff4 100644
--- a/source/blender/blenkernel/intern/pbvh_intern.hh
+++ b/source/blender/blenkernel/intern/pbvh_intern.hh
@@ -155,7 +155,7 @@ struct PBVH {
float (*vert_normals)[3];
bool *hide_vert;
float (*vert_positions)[3];
- const int *poly_offsets;
+ blender::OffsetIndices<int> polys;
bool *hide_poly;
/** Material indices. Only valid for polygon meshes. */
const int *material_indices;
More information about the Bf-blender-cvs
mailing list