Commit: 501352ef05ca3ca262e0eaf3e1b0753376cf1d1a Author: Hans Goudey Date: Sun Feb 5 16:56:37 2023 -0500 Branches: master https://developer.blender.org/rB501352ef05ca3ca262e0eaf3e1b0753376cf1d1a
Cleanup: Move PBVH files to C++ For continued refactoring of the Mesh data structure. See T103343. =================================================================== M source/blender/blenkernel/BKE_pbvh.h M source/blender/blenkernel/CMakeLists.txt R091 source/blender/blenkernel/intern/pbvh.c source/blender/blenkernel/intern/pbvh.cc R092 source/blender/blenkernel/intern/pbvh_bmesh.c source/blender/blenkernel/intern/pbvh_bmesh.cc M source/blender/blenkernel/intern/pbvh_colors.cc R091 source/blender/blenkernel/intern/pbvh_intern.h source/blender/blenkernel/intern/pbvh_intern.hh M source/blender/blenkernel/intern/pbvh_pixels.cc =================================================================== diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h index 7153f05c0c3..367dc9a3035 100644 --- a/source/blender/blenkernel/BKE_pbvh.h +++ b/source/blender/blenkernel/BKE_pbvh.h @@ -167,6 +167,7 @@ typedef enum { PBVH_TopologyUpdated = 1 << 17, /* Used internally by pbvh_bmesh.c */ } PBVHNodeFlags; +ENUM_OPERATORS(PBVHNodeFlags, PBVH_TopologyUpdated); typedef struct PBVHFrustumPlanes { float (*planes)[4]; diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index c5d3f6eb3ab..850c55de7e9 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -248,9 +248,9 @@ set(SRC intern/particle_child.c intern/particle_distribute.c intern/particle_system.c - intern/pbvh.c + intern/pbvh.cc intern/pbvh_colors.cc - intern/pbvh_bmesh.c + intern/pbvh_bmesh.cc intern/pbvh_pixels.cc intern/pbvh_uv_islands.cc intern/pointcache.c @@ -505,7 +505,7 @@ set(SRC intern/multires_reshape.hh intern/multires_unsubdivide.h intern/ocean_intern.h - intern/pbvh_intern.h + intern/pbvh_intern.hh intern/pbvh_uv_islands.hh intern/subdiv_converter.h intern/subdiv_inline.h diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.cc similarity index 91% rename from source/blender/blenkernel/intern/pbvh.c rename to source/blender/blenkernel/intern/pbvh.cc index 6b21568ba38..1f3583a7f7e 100644 --- a/source/blender/blenkernel/intern/pbvh.c +++ b/source/blender/blenkernel/intern/pbvh.cc @@ -6,13 +6,14 @@ #include "MEM_guardedalloc.h" -#include "BLI_utildefines.h" +#include <climits> #include "BLI_bitmap.h" #include "BLI_ghash.h" #include "BLI_math.h" #include "BLI_rand.h" #include "BLI_task.h" +#include "BLI_utildefines.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" @@ -33,9 +34,7 @@ #include "atomic_ops.h" -#include "pbvh_intern.h" - -#include <limits.h> +#include "pbvh_intern.hh" #define LEAF_LIMIT 10000 @@ -50,12 +49,12 @@ //#define PERFCNTRS #define STACK_FIXED_DEPTH 100 -typedef struct PBVHStack { +struct PBVHStack { PBVHNode *node; bool revisiting; -} PBVHStack; +}; -typedef struct PBVHIter { +struct PBVHIter { PBVH *pbvh; BKE_pbvh_SearchCallback scb; void *search_data; @@ -65,7 +64,7 @@ typedef struct PBVHIter { PBVHStack stackfixed[STACK_FIXED_DEPTH]; int stackspace; -} PBVHIter; +}; void BB_reset(BB *bb) { @@ -273,7 +272,8 @@ void pbvh_grow_nodes(PBVH *pbvh, int totnode) if (pbvh->node_mem_count < totnode) { pbvh->node_mem_count = totnode; } - pbvh->nodes = MEM_recallocN(pbvh->nodes, sizeof(PBVHNode) * pbvh->node_mem_count); + pbvh->nodes = static_cast<PBVHNode *>( + MEM_recallocN(pbvh->nodes, sizeof(PBVHNode) * pbvh->node_mem_count)); } pbvh->totnode = totnode; @@ -315,7 +315,8 @@ static void build_mesh_leaf_node(PBVH *pbvh, PBVHNode *node) /* reserve size is rough guess */ GHash *map = BLI_ghash_int_new_ex("build_mesh_leaf_node gh", 2 * totface); - int(*face_vert_indices)[3] = MEM_mallocN(sizeof(int[3]) * totface, "bvh node face vert indices"); + int(*face_vert_indices)[3] = static_cast<int(*)[3]>( + MEM_mallocN(sizeof(int[3]) * totface, __func__)); node->face_vert_indices = (const int(*)[3])face_vert_indices; @@ -337,8 +338,8 @@ static void build_mesh_leaf_node(PBVH *pbvh, PBVHNode *node) } } - int *vert_indices = MEM_callocN(sizeof(int) * (node->uniq_verts + node->face_verts), - "bvh node vert indices"); + int *vert_indices = static_cast<int *>( + MEM_callocN(sizeof(int) * (node->uniq_verts + node->face_verts), __func__)); node->vert_indices = vert_indices; /* Build the vertex list, unique verts first */ @@ -368,7 +369,7 @@ static void build_mesh_leaf_node(PBVH *pbvh, PBVHNode *node) BKE_pbvh_node_fully_hidden_set(node, !has_visible); - BLI_ghash_free(map, NULL, NULL); + BLI_ghash_free(map, nullptr, nullptr); } static void update_vb(PBVH *pbvh, PBVHNode *node, BBC *prim_bbc, int offset, int count) @@ -392,8 +393,8 @@ int BKE_pbvh_count_grid_quads(BLI_bitmap **grid_hidden, /* grid hidden layer is present, so have to check each grid for * visibility */ - int depth1 = (int)(log2((double)gridsize - 1.0) + DBL_EPSILON); - int depth2 = (int)(log2((double)display_gridsize - 1.0) + DBL_EPSILON); + int depth1 = int(log2((double)gridsize - 1.0) + DBL_EPSILON); + int depth2 = int(log2((double)display_gridsize - 1.0) + DBL_EPSILON); int skip = depth2 < depth1 ? 1 << (depth1 - depth2 - 1) : 1; @@ -550,7 +551,7 @@ static void build_sub(PBVH *pbvh, BB cb_backing; if (!prim_scratch) { - prim_scratch = MEM_malloc_arrayN(pbvh->totprim, sizeof(int), __func__); + prim_scratch = static_cast<int *>(MEM_malloc_arrayN(pbvh->totprim, sizeof(int), __func__)); } /* Decide whether this is a leaf or not */ @@ -615,7 +616,7 @@ static void build_sub(PBVH *pbvh, /* Build children */ build_sub(pbvh, pbvh->nodes[node_index].children_offset, - NULL, + nullptr, prim_bbc, offset, end - offset, @@ -623,7 +624,7 @@ static void build_sub(PBVH *pbvh, depth + 1); build_sub(pbvh, pbvh->nodes[node_index].children_offset + 1, - NULL, + nullptr, prim_bbc, end, offset + count - end, @@ -645,19 +646,20 @@ static void pbvh_build(PBVH *pbvh, BB *cb, BBC *prim_bbc, int totprim) if (pbvh->prim_indices) { MEM_freeN(pbvh->prim_indices); } - pbvh->prim_indices = MEM_mallocN(sizeof(int) * totprim, "bvh prim indices"); + pbvh->prim_indices = static_cast<int *>(MEM_mallocN(sizeof(int) * totprim, __func__)); for (int i = 0; i < totprim; i++) { pbvh->prim_indices[i] = i; } pbvh->totnode = 0; if (pbvh->node_mem_count < 100) { pbvh->node_mem_count = 100; - pbvh->nodes = MEM_callocN(sizeof(PBVHNode) * pbvh->node_mem_count, "bvh initial nodes"); + pbvh->nodes = static_cast<PBVHNode *>( + MEM_callocN(sizeof(PBVHNode) * pbvh->node_mem_count, __func__)); } } pbvh->totnode = 1; - build_sub(pbvh, 0, cb, prim_bbc, 0, totprim, NULL, 0); + build_sub(pbvh, 0, cb, prim_bbc, 0, totprim, nullptr, 0); } static void pbvh_draw_args_init(PBVH *pbvh, PBVH_GPU_Args *args, PBVHNode *node) @@ -669,7 +671,7 @@ static void pbvh_draw_args_init(PBVH *pbvh, PBVH_GPU_Args *args, PBVHNode *node) args->mesh_grids_num = pbvh->totgrid; args->node = node; - BKE_pbvh_node_num_verts(pbvh, node, NULL, &args->node_verts_num); + BKE_pbvh_node_num_verts(pbvh, node, nullptr, &args->node_verts_num); args->grid_hidden = pbvh->grid_hidden; args->face_sets_color_default = pbvh->face_sets_color_default; @@ -680,9 +682,9 @@ static void pbvh_draw_args_init(PBVH *pbvh, PBVH_GPU_Args *args, PBVHNode *node) args->mlooptri = pbvh->looptri; if (ELEM(pbvh->header.type, PBVH_FACES, PBVH_GRIDS)) { - args->hide_poly = pbvh->pdata ? - CustomData_get_layer_named(pbvh->pdata, CD_PROP_BOOL, ".hide_poly") : - NULL; + args->hide_poly = pbvh->pdata ? static_cast<const bool *>(CustomData_get_layer_named( + pbvh->pdata, CD_PROP_BOOL, ".hide_poly")) : + nullptr; } switch (pbvh->header.type) { @@ -813,30 +815,31 @@ void BKE_pbvh_build_mesh(PBVH *pbvh, const MLoop *mloop, float (*vert_positions)[3], int totvert, - struct CustomData *vdata, - struct CustomData *ldata, - struct CustomData *pdata, + CustomData *vdata, + CustomData *ldata, + CustomData *pdata, const MLoopTri *looptri, int looptri_num) { - BBC *prim_bbc = NULL; + BBC *prim_bbc = nullptr; BB cb; pbvh->mesh = mesh; pbvh->header.type = PBVH_FACES; pbvh->mpoly = mpoly; - pbvh->hide_poly = (bool *)CustomData_get_layer_named_for_write( - &mesh->pdata, CD_PROP_BOOL, ".hide_poly", mesh->totpoly); - pbvh->material_indices = (const int *)CustomData_get_layer_named( - &mesh->pdata, CD_PROP_INT32, "material_index"); + 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 *>( + CustomData_get_layer_named(&mesh->pdata, CD_PROP_INT32, "material_index")); pbvh->mloop = mloop; pbvh->looptri = looptri; pbvh->vert_positions = vert_positions; BKE_mesh_vertex_normals_ensure(mesh); pbvh->vert_normals = BKE_mesh_vertex_normals_for_write(mesh); - pbvh->hide_vert = (bool *)CustomData_get_layer_named_for_write( - &mesh->vdata, CD_PROP_BOOL, ".hide_vert", mesh->totvert); - pbvh->vert_bitmap = MEM_calloc_arrayN(totvert, sizeof(bool), "bvh->vert_bitmap"); + pbvh->hide_vert = static_cast<bool *>(CustomData_get_layer_named_for_write( + &mesh->vdata, CD_PROP_BOOL, ".hide_vert", mesh->totvert)); + pbvh->vert_bitmap = static_cast<bool *>( + MEM_calloc_arrayN(totvert, sizeof(bool), "bvh->vert_bitmap")); pbvh->totvert = totvert; #ifdef TEST_PBVH_FACE_SPLIT @@ -859,7 +862,7 @@ void BKE_pbvh_build_mesh(PBVH *pbvh, BB_reset(&cb); /* For each face, store the AABB and the AABB centroid */ - prim_bbc = MEM_mallocN(sizeof(BBC) * looptri_num, "prim_bbc"); + prim_bbc = static_cast<BBC *>(MEM_mallocN(sizeof(BBC) * looptri_num, __func__)); for (int i = 0; i < looptri_num; i++) { const MLoopTri *lt = &looptri[i]; @@ -948,7 +951,7 @@ void BKE_pbvh_build_grids(PBVH *pbvh, BB_reset(&cb); /* For each grid, store the AABB and the AABB centroid */ - BBC *prim_bbc = MEM_mallocN(sizeof(BBC) * totgrid, "prim_bbc"); + BBC *prim_bbc = static_cast<BBC *>(MEM_mallocN(sizeof(BBC) * totgrid, __func__)); for (int @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs