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:
authorNicholas Bishop <nicholasbishop@gmail.com>2012-12-30 22:26:11 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2012-12-30 22:26:11 +0400
commit31f978c8efdfd88d2cf2b5d9ae7c5d91c81e13d3 (patch)
tree64203b4b8e556adfa7a77998cbd8d45e36796d4d /source/blender/blenkernel/intern/pbvh.c
parentec258542e2b537c4292fd9214d898fa5d3864ef9 (diff)
Move layer displacements from SculptUndoNode to PBVHNode
* This doesn't make much difference for regular mesh/multires sculpting, but for dynamic topology sculpting the undo stack isn't split up by PBVH nodes, so it's more convenient to store the layer data in PBVH nodes. * Note that the life cycle of the layer displacement data is unchanged -- it's only valid during a stroke with the layer brush, gets free'd when the undo step ends.
Diffstat (limited to 'source/blender/blenkernel/intern/pbvh.c')
-rw-r--r--source/blender/blenkernel/intern/pbvh.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 4341e701810..e9009050d4b 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -600,6 +600,7 @@ void BLI_pbvh_free(PBVH *bvh)
MEM_freeN(node->vert_indices);
if (node->face_vert_indices)
MEM_freeN(node->face_vert_indices);
+ BLI_pbvh_node_layer_disp_free(node);
}
}
@@ -1611,6 +1612,26 @@ void BLI_pbvh_grids_update(PBVH *bvh, CCGElem **grids, DMGridAdjacency *gridadj,
}
}
+/* Get the node's displacement layer, creating it if necessary */
+float *BLI_pbvh_node_layer_disp_get(PBVH *bvh, PBVHNode *node)
+{
+ if (!node->layer_disp) {
+ int totvert = 0;
+ BLI_pbvh_node_num_verts(bvh, node, &totvert, NULL);
+ node->layer_disp = MEM_callocN(sizeof(float) * totvert, "layer disp");
+ }
+ return node->layer_disp;
+}
+
+/* If the node has a displacement layer, free it and set to null */
+void BLI_pbvh_node_layer_disp_free(PBVHNode *node)
+{
+ if (node->layer_disp) {
+ MEM_freeN(node->layer_disp);
+ node->layer_disp = NULL;
+ }
+}
+
float (*BLI_pbvh_get_vertCos(PBVH * pbvh))[3]
{
int a;