Use const for BVH mesh arrays
This commit is contained in:
@@ -53,9 +53,9 @@ typedef struct BVHTreeFromMesh {
|
||||
BVHTree_RayCastCallback raycast_callback;
|
||||
|
||||
/* Vertex array, so that callbacks have instante access to data */
|
||||
struct MVert *vert;
|
||||
struct MEdge *edge; /* only used for BVHTreeFromMeshEdges */
|
||||
struct MFace *face;
|
||||
const struct MVert *vert;
|
||||
const struct MEdge *edge; /* only used for BVHTreeFromMeshEdges */
|
||||
const struct MFace *face;
|
||||
bool vert_allocated;
|
||||
bool edge_allocated;
|
||||
bool face_allocated;
|
||||
@@ -69,7 +69,7 @@ typedef struct BVHTreeFromMesh {
|
||||
|
||||
} BVHTreeFromMesh;
|
||||
|
||||
/*
|
||||
/**
|
||||
* Builds a bvh tree where nodes are the relevant elements of the given mesh.
|
||||
* Configures BVHTreeFromMesh.
|
||||
*
|
||||
@@ -79,18 +79,26 @@ typedef struct BVHTreeFromMesh {
|
||||
*
|
||||
* free_bvhtree_from_mesh should be called when the tree is no longer needed.
|
||||
*/
|
||||
BVHTree *bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
|
||||
BVHTree *bvhtree_from_mesh_verts_ex(struct BVHTreeFromMesh *data, struct MVert *vert, const int numVerts,
|
||||
const bool vert_allocated, BLI_bitmap *mask, int numVerts_active,
|
||||
float epsilon, int tree_type, int axis);
|
||||
BVHTree *bvhtree_from_mesh_verts(
|
||||
struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
|
||||
BVHTree *bvhtree_from_mesh_verts_ex(
|
||||
struct BVHTreeFromMesh *data, struct MVert *vert, const int numVerts,
|
||||
const bool vert_allocated, BLI_bitmap *mask, int numVerts_active,
|
||||
float epsilon, int tree_type, int axis);
|
||||
|
||||
BVHTree *bvhtree_from_mesh_edges(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
|
||||
BVHTree *bvhtree_from_mesh_edges(
|
||||
struct BVHTreeFromMesh *data, struct DerivedMesh *mesh,
|
||||
float epsilon, int tree_type, int axis);
|
||||
|
||||
BVHTree *bvhtree_from_mesh_faces(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
|
||||
BVHTree *bvhtree_from_mesh_faces_ex(struct BVHTreeFromMesh *data, struct MVert *vert, const bool vert_allocated,
|
||||
struct MFace *face, const int numFaces, const bool face_allocated,
|
||||
BLI_bitmap *mask, int numFaces_active,
|
||||
float epsilon, int tree_type, int axis);
|
||||
BVHTree *bvhtree_from_mesh_faces(
|
||||
struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon,
|
||||
int tree_type, int axis);
|
||||
BVHTree *bvhtree_from_mesh_faces_ex(
|
||||
struct BVHTreeFromMesh *data,
|
||||
struct MVert *vert, const bool vert_allocated,
|
||||
struct MFace *face, const int numFaces, const bool face_allocated,
|
||||
BLI_bitmap *mask, int numFaces_active,
|
||||
float epsilon, int tree_type, int axis);
|
||||
|
||||
/*
|
||||
* Frees data allocated by a call to bvhtree_from_mesh_*.
|
||||
|
||||
@@ -84,8 +84,8 @@ static float sphereray_tri_intersection(const BVHTreeRay *ray, float radius, con
|
||||
static void mesh_faces_nearest_point(void *userdata, int index, const float co[3], BVHTreeNearest *nearest)
|
||||
{
|
||||
const BVHTreeFromMesh *data = (BVHTreeFromMesh *) userdata;
|
||||
MVert *vert = data->vert;
|
||||
MFace *face = data->face + index;
|
||||
const MVert *vert = data->vert;
|
||||
const MFace *face = data->face + index;
|
||||
|
||||
const float *t0, *t1, *t2, *t3;
|
||||
t0 = vert[face->v1].co;
|
||||
@@ -148,8 +148,8 @@ static void editmesh_faces_nearest_point(void *userdata, int index, const float
|
||||
static void mesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
|
||||
{
|
||||
const BVHTreeFromMesh *data = (BVHTreeFromMesh *) userdata;
|
||||
MVert *vert = data->vert;
|
||||
MFace *face = data->face + index;
|
||||
const MVert *vert = data->vert;
|
||||
const MFace *face = &data->face[index];
|
||||
|
||||
const float *t0, *t1, *t2, *t3;
|
||||
t0 = vert[face->v1].co;
|
||||
@@ -217,8 +217,8 @@ static void editmesh_faces_spherecast(void *userdata, int index, const BVHTreeRa
|
||||
static void mesh_edges_nearest_point(void *userdata, int index, const float co[3], BVHTreeNearest *nearest)
|
||||
{
|
||||
const BVHTreeFromMesh *data = (BVHTreeFromMesh *) userdata;
|
||||
MVert *vert = data->vert;
|
||||
MEdge *edge = data->edge + index;
|
||||
const MVert *vert = data->vert;
|
||||
const MEdge *edge = data->edge + index;
|
||||
float nearest_tmp[3], dist_sq;
|
||||
|
||||
const float *t0, *t1;
|
||||
@@ -262,7 +262,7 @@ static void mesh_verts_spherecast_do(
|
||||
static void mesh_verts_spherecast(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
|
||||
{
|
||||
const BVHTreeFromMesh *data = (BVHTreeFromMesh *)userdata;
|
||||
float *v = data->vert[index].co;
|
||||
const float *v = data->vert[index].co;
|
||||
|
||||
mesh_verts_spherecast_do(data, index, v, ray, hit);
|
||||
}
|
||||
@@ -272,8 +272,8 @@ static void mesh_verts_spherecast(void *userdata, int index, const BVHTreeRay *r
|
||||
static void mesh_edges_spherecast(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
|
||||
{
|
||||
const BVHTreeFromMesh *data = (BVHTreeFromMesh *)userdata;
|
||||
MVert *vert = data->vert;
|
||||
MEdge *edge = &data->edge[index];
|
||||
const MVert *vert = data->vert;
|
||||
const MEdge *edge = &data->edge[index];
|
||||
|
||||
const float radius_sq = SQUARE(data->sphere_radius);
|
||||
float dist;
|
||||
@@ -624,10 +624,11 @@ static BVHTree *bvhtree_from_mesh_faces_create_tree(float epsilon, int tree_type
|
||||
return tree;
|
||||
}
|
||||
|
||||
static void bvhtree_from_mesh_faces_setup_data(BVHTreeFromMesh *data, BVHTree *tree, const bool is_cached,
|
||||
float epsilon, BMEditMesh *em,
|
||||
MVert *vert, const bool vert_allocated,
|
||||
MFace *face, const bool face_allocated)
|
||||
static void bvhtree_from_mesh_faces_setup_data(
|
||||
BVHTreeFromMesh *data, BVHTree *tree, const bool is_cached,
|
||||
float epsilon, BMEditMesh *em,
|
||||
MVert *vert, const bool vert_allocated,
|
||||
MFace *face, const bool face_allocated)
|
||||
{
|
||||
memset(data, 0, sizeof(*data));
|
||||
data->em_evil = em;
|
||||
@@ -727,12 +728,14 @@ BVHTree *bvhtree_from_mesh_faces(BVHTreeFromMesh *data, DerivedMesh *dm, float e
|
||||
* \param mask if not null, true elements give which faces to add to BVH tree.
|
||||
* \param numFaces_active if >= 0, number of active faces to add to BVH tree (else will be computed from mask).
|
||||
*/
|
||||
BVHTree *bvhtree_from_mesh_faces_ex(BVHTreeFromMesh *data, MVert *vert, const bool vert_allocated,
|
||||
MFace *face, const int numFaces, const bool face_allocated,
|
||||
BLI_bitmap *mask, int numFaces_active, float epsilon, int tree_type, int axis)
|
||||
BVHTree *bvhtree_from_mesh_faces_ex(
|
||||
BVHTreeFromMesh *data, MVert *vert, const bool vert_allocated,
|
||||
MFace *face, const int numFaces, const bool face_allocated,
|
||||
BLI_bitmap *mask, int numFaces_active, float epsilon, int tree_type, int axis)
|
||||
{
|
||||
BVHTree *tree = bvhtree_from_mesh_faces_create_tree(epsilon, tree_type, axis, NULL, vert, face, numFaces,
|
||||
mask, numFaces_active);
|
||||
BVHTree *tree = bvhtree_from_mesh_faces_create_tree(
|
||||
epsilon, tree_type, axis, NULL, vert, face, numFaces,
|
||||
mask, numFaces_active);
|
||||
|
||||
/* Setup BVHTreeFromMesh */
|
||||
bvhtree_from_mesh_faces_setup_data(data, tree, false, epsilon, NULL, vert, vert_allocated, face, face_allocated);
|
||||
@@ -749,13 +752,13 @@ void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data)
|
||||
}
|
||||
|
||||
if (data->vert_allocated) {
|
||||
MEM_freeN(data->vert);
|
||||
MEM_freeN((void *)data->vert);
|
||||
}
|
||||
if (data->edge_allocated) {
|
||||
MEM_freeN(data->edge);
|
||||
MEM_freeN((void *)data->edge);
|
||||
}
|
||||
if (data->face_allocated) {
|
||||
MEM_freeN(data->face);
|
||||
MEM_freeN((void *)data->face);
|
||||
}
|
||||
|
||||
memset(data, 0, sizeof(*data));
|
||||
|
||||
@@ -2894,8 +2894,8 @@ static void dynamicPaint_doMaterialTex(BrushMaterials *bMats, float color[3], fl
|
||||
static void mesh_faces_spherecast_dp(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
|
||||
{
|
||||
const BVHTreeFromMesh *data = (BVHTreeFromMesh *) userdata;
|
||||
MVert *vert = data->vert;
|
||||
MFace *face = data->face + index;
|
||||
const MVert *vert = data->vert;
|
||||
const MFace *face = data->face + index;
|
||||
short quad = 0;
|
||||
|
||||
const float *t0, *t1, *t2, *t3;
|
||||
@@ -2930,8 +2930,8 @@ static void mesh_faces_spherecast_dp(void *userdata, int index, const BVHTreeRay
|
||||
static void mesh_faces_nearest_point_dp(void *userdata, int index, const float co[3], BVHTreeNearest *nearest)
|
||||
{
|
||||
const BVHTreeFromMesh *data = (BVHTreeFromMesh *) userdata;
|
||||
MVert *vert = data->vert;
|
||||
MFace *face = data->face + index;
|
||||
const MVert *vert = data->vert;
|
||||
const MFace *face = data->face + index;
|
||||
short quad = 0;
|
||||
|
||||
const float *t0, *t1, *t2, *t3;
|
||||
|
||||
Reference in New Issue
Block a user