Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_pbvh.h19
-rw-r--r--source/blender/blenkernel/intern/pbvh.c88
-rw-r--r--source/blender/blenkernel/intern/pbvh_intern.h4
-rw-r--r--source/blender/editors/sculpt_paint/paint_hide.c2
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_undo.c6
5 files changed, 71 insertions, 48 deletions
diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index 9cefdd4f28e..0832e2498d4 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -174,13 +174,16 @@ void BKE_pbvh_node_mark_normals_update(PBVHNode *node);
void BKE_pbvh_node_mark_topology_update(PBVHNode *node);
void BKE_pbvh_node_fully_hidden_set(PBVHNode *node, int fully_hidden);
-void BKE_pbvh_node_get_grids(PBVH *bvh, PBVHNode *node,
- int **grid_indices, int *totgrid, int *maxgrid, int *gridsize,
- struct CCGElem ***grid_elems);
-void BKE_pbvh_node_num_verts(PBVH *bvh, PBVHNode *node,
- int *uniquevert, int *totvert);
-void BKE_pbvh_node_get_verts(PBVH *bvh, PBVHNode *node,
- int **vert_indices, struct MVert **verts);
+void BKE_pbvh_node_get_grids(
+ PBVH *bvh, PBVHNode *node,
+ int **grid_indices, int *totgrid, int *maxgrid, int *gridsize,
+ struct CCGElem ***grid_elems);
+void BKE_pbvh_node_num_verts(
+ PBVH *bvh, PBVHNode *node,
+ int *r_uniquevert, int *r_totvert);
+void BKE_pbvh_node_get_verts(
+ PBVH *bvh, PBVHNode *node,
+ const int **r_vert_indices, struct MVert **r_verts);
void BKE_pbvh_node_get_BB(PBVHNode *node, float bb_min[3], float bb_max[3]);
void BKE_pbvh_node_get_original_BB(PBVHNode *node, float bb_min[3], float bb_max[3]);
@@ -252,7 +255,7 @@ typedef struct PBVHVertexIter {
/* mesh */
struct MVert *mverts;
int totvert;
- int *vert_indices;
+ const int *vert_indices;
float *vmask;
/* bmesh */
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index a015e8427c2..361557633cb 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -280,6 +280,8 @@ static void build_mesh_leaf_node(PBVH *bvh, PBVHNode *node)
GHash *map;
int i, j, totface;
bool has_visible = false;
+ int (*face_vert_indices)[4];
+ int *vert_indices;
node->uniq_verts = node->face_verts = 0;
totface = node->totprim;
@@ -287,15 +289,17 @@ static void build_mesh_leaf_node(PBVH *bvh, PBVHNode *node)
/* reserve size is rough guess */
map = BLI_ghash_int_new_ex("build_mesh_leaf_node gh", 2 * totface);
- node->face_vert_indices = MEM_callocN(sizeof(int) * 4 * totface,
- "bvh node face vert indices");
+ face_vert_indices = MEM_callocN(sizeof(int[4]) * totface,
+ "bvh node face vert indices");
+
+ node->face_vert_indices = (const int (*)[4])face_vert_indices;
for (i = 0; i < totface; ++i) {
const MFace *f = &bvh->faces[node->prim_indices[i]];
int sides = f->v4 ? 4 : 3;
for (j = 0; j < sides; ++j) {
- node->face_vert_indices[i][j] =
+ face_vert_indices[i][j] =
map_insert_vert(bvh, map, &node->face_verts,
&node->uniq_verts, (&f->v1)[j]);
}
@@ -304,9 +308,10 @@ static void build_mesh_leaf_node(PBVH *bvh, PBVHNode *node)
has_visible = true;
}
- node->vert_indices = MEM_callocN(sizeof(int) *
- (node->uniq_verts + node->face_verts),
- "bvh node vert indices");
+ vert_indices = MEM_callocN(sizeof(int) *
+ (node->uniq_verts + node->face_verts),
+ "bvh node vert indices");
+ node->vert_indices = vert_indices;
/* Build the vertex list, unique verts first */
GHASH_ITER (gh_iter, map) {
@@ -316,7 +321,7 @@ static void build_mesh_leaf_node(PBVH *bvh, PBVHNode *node)
if (ndx < 0)
ndx = -ndx + node->uniq_verts - 1;
- node->vert_indices[ndx] =
+ vert_indices[ndx] =
GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(&gh_iter));
}
@@ -325,9 +330,9 @@ static void build_mesh_leaf_node(PBVH *bvh, PBVHNode *node)
int sides = f->v4 ? 4 : 3;
for (j = 0; j < sides; ++j) {
- if (node->face_vert_indices[i][j] < 0)
- node->face_vert_indices[i][j] =
- -node->face_vert_indices[i][j] +
+ if (face_vert_indices[i][j] < 0)
+ face_vert_indices[i][j] =
+ -face_vert_indices[i][j] +
node->uniq_verts - 1;
}
}
@@ -633,9 +638,9 @@ void BKE_pbvh_free(PBVH *bvh)
if (node->draw_buffers)
GPU_free_pbvh_buffers(node->draw_buffers);
if (node->vert_indices)
- MEM_freeN(node->vert_indices);
+ MEM_freeN((void *)node->vert_indices);
if (node->face_vert_indices)
- MEM_freeN(node->face_vert_indices);
+ MEM_freeN((void *)node->face_vert_indices);
BKE_pbvh_node_layer_disp_free(node);
if (node->bm_faces)
@@ -1016,7 +1021,8 @@ static void pbvh_update_normals(PBVH *bvh, PBVHNode **nodes,
PBVHNode *node = nodes[n];
if (node->flag & PBVH_UpdateNormals) {
- int i, *verts, totvert;
+ const int *verts;
+ int i, totvert;
verts = node->vert_indices;
totvert = node->uniq_verts;
@@ -1357,51 +1363,62 @@ void BKE_pbvh_node_fully_hidden_set(PBVHNode *node, int fully_hidden)
node->flag &= ~PBVH_FullyHidden;
}
-void BKE_pbvh_node_get_verts(PBVH *bvh, PBVHNode *node, int **vert_indices, MVert **verts)
+void BKE_pbvh_node_get_verts(
+ PBVH *bvh, PBVHNode *node,
+ const int **r_vert_indices, MVert **r_verts)
{
- if (vert_indices) *vert_indices = node->vert_indices;
- if (verts) *verts = bvh->verts;
+ if (r_vert_indices) {
+ *r_vert_indices = node->vert_indices;
+ }
+
+ if (r_verts) {
+ *r_verts = bvh->verts;
+ }
}
-void BKE_pbvh_node_num_verts(PBVH *bvh, PBVHNode *node, int *uniquevert, int *totvert)
+void BKE_pbvh_node_num_verts(
+ PBVH *bvh, PBVHNode *node,
+ int *r_uniquevert, int *r_totvert)
{
int tot;
switch (bvh->type) {
case PBVH_GRIDS:
tot = node->totprim * bvh->gridkey.grid_area;
- if (totvert) *totvert = tot;
- if (uniquevert) *uniquevert = tot;
+ if (r_totvert) *r_totvert = tot;
+ if (r_uniquevert) *r_uniquevert = tot;
break;
case PBVH_FACES:
- if (totvert) *totvert = node->uniq_verts + node->face_verts;
- if (uniquevert) *uniquevert = node->uniq_verts;
+ if (r_totvert) *r_totvert = node->uniq_verts + node->face_verts;
+ if (r_uniquevert) *r_uniquevert = node->uniq_verts;
break;
case PBVH_BMESH:
tot = BLI_gset_size(node->bm_unique_verts);
- if (totvert) *totvert = tot + BLI_gset_size(node->bm_other_verts);
- if (uniquevert) *uniquevert = tot;
+ if (r_totvert) *r_totvert = tot + BLI_gset_size(node->bm_other_verts);
+ if (r_uniquevert) *r_uniquevert = tot;
break;
}
}
-void BKE_pbvh_node_get_grids(PBVH *bvh, PBVHNode *node, int **grid_indices, int *totgrid, int *maxgrid, int *gridsize, CCGElem ***griddata)
+void BKE_pbvh_node_get_grids(
+ PBVH *bvh, PBVHNode *node,
+ int **r_grid_indices, int *r_totgrid, int *r_maxgrid, int *r_gridsize, CCGElem ***r_griddata)
{
switch (bvh->type) {
case PBVH_GRIDS:
- if (grid_indices) *grid_indices = node->prim_indices;
- if (totgrid) *totgrid = node->totprim;
- if (maxgrid) *maxgrid = bvh->totgrid;
- if (gridsize) *gridsize = bvh->gridkey.grid_size;
- if (griddata) *griddata = bvh->grids;
+ if (r_grid_indices) *r_grid_indices = node->prim_indices;
+ if (r_totgrid) *r_totgrid = node->totprim;
+ if (r_maxgrid) *r_maxgrid = bvh->totgrid;
+ if (r_gridsize) *r_gridsize = bvh->gridkey.grid_size;
+ if (r_griddata) *r_griddata = bvh->grids;
break;
case PBVH_FACES:
case PBVH_BMESH:
- if (grid_indices) *grid_indices = NULL;
- if (totgrid) *totgrid = 0;
- if (maxgrid) *maxgrid = 0;
- if (gridsize) *gridsize = 0;
- if (griddata) *griddata = NULL;
+ if (r_grid_indices) *r_grid_indices = NULL;
+ if (r_totgrid) *r_totgrid = 0;
+ if (r_maxgrid) *r_maxgrid = 0;
+ if (r_gridsize) *r_gridsize = 0;
+ if (r_griddata) *r_griddata = NULL;
break;
}
}
@@ -1963,7 +1980,8 @@ void pbvh_vertex_iter_init(PBVH *bvh, PBVHNode *node,
{
struct CCGElem **grids;
struct MVert *verts;
- int *grid_indices, *vert_indices;
+ const int *vert_indices;
+ int *grid_indices;
int totgrid, gridsize, uniq_verts, totvert;
vi->grid = NULL;
diff --git a/source/blender/blenkernel/intern/pbvh_intern.h b/source/blender/blenkernel/intern/pbvh_intern.h
index 5bb90af889e..74897d6f4cd 100644
--- a/source/blender/blenkernel/intern/pbvh_intern.h
+++ b/source/blender/blenkernel/intern/pbvh_intern.h
@@ -76,7 +76,7 @@ struct PBVHNode {
*
* Used for leaf nodes in a mesh-based PBVH (not multires.)
*/
- int *vert_indices;
+ const int *vert_indices;
unsigned int uniq_verts, face_verts;
/* An array mapping face corners into the vert_indices
@@ -88,7 +88,7 @@ struct PBVHNode {
*
* Used for leaf nodes in a mesh-based PBVH (not multires.)
*/
- int (*face_vert_indices)[4];
+ const int (*face_vert_indices)[4];
/* Indicates whether this node is a leaf or not; also used for
* marking various updates that need to be applied. */
diff --git a/source/blender/editors/sculpt_paint/paint_hide.c b/source/blender/editors/sculpt_paint/paint_hide.c
index 52a60347f9f..2f1d4cd4194 100644
--- a/source/blender/editors/sculpt_paint/paint_hide.c
+++ b/source/blender/editors/sculpt_paint/paint_hide.c
@@ -98,7 +98,7 @@ static void partialvis_update_mesh(Object *ob,
Mesh *me = ob->data;
MVert *mvert;
const float *paint_mask;
- int *vert_indices;
+ const int *vert_indices;
int totvert, i;
bool any_changed = false, any_visible = false;
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c
index 2f0957c3b60..c4556a5e145 100644
--- a/source/blender/editors/sculpt_paint/sculpt_undo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_undo.c
@@ -695,7 +695,8 @@ static void sculpt_undo_store_hidden(Object *ob, SculptUndoNode *unode)
}
else {
MVert *mvert;
- int *vert_indices, allvert;
+ const int *vert_indices;
+ int allvert;
int i;
BKE_pbvh_node_num_verts(pbvh, node, NULL, &allvert);
@@ -846,7 +847,8 @@ SculptUndoNode *sculpt_undo_push_node(Object *ob, PBVHNode *node,
memcpy(unode->grids, grids, sizeof(int) * totgrid);
}
else {
- int *vert_indices, allvert;
+ const int *vert_indices;
+ int allvert;
BKE_pbvh_node_num_verts(ss->pbvh, node, NULL, &allvert);
BKE_pbvh_node_get_verts(ss->pbvh, node, &vert_indices, NULL);
memcpy(unode->index, vert_indices, sizeof(int) * unode->totvert);