diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-04-14 09:02:38 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-04-14 10:58:07 +0300 |
commit | 8486ee39bd689f8659cf90cc6942560225de7527 (patch) | |
tree | 5c42a63c78761e6958686519705181d24112c222 /source/blender/blenkernel | |
parent | 34d4ad326cdaf9cf90ac6efbea52ba9d62eac594 (diff) |
PBVH: use realloc/recalloc
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/pbvh.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c index 5e07437d426..c9e632b7295 100644 --- a/source/blender/blenkernel/intern/pbvh.c +++ b/source/blender/blenkernel/intern/pbvh.c @@ -232,16 +232,11 @@ static int partition_indices_material(PBVH *bvh, int lo, int hi) void pbvh_grow_nodes(PBVH *bvh, int totnode) { - if (totnode > bvh->node_mem_count) { - PBVHNode *prev = bvh->nodes; - bvh->node_mem_count *= 1.33; + if (UNLIKELY(totnode > bvh->node_mem_count)) { + bvh->node_mem_count = bvh->node_mem_count + (bvh->node_mem_count / 3); if (bvh->node_mem_count < totnode) bvh->node_mem_count = totnode; - bvh->nodes = MEM_mallocN(sizeof(PBVHNode) * bvh->node_mem_count, - "bvh nodes"); - memcpy(bvh->nodes, prev, bvh->totnode * sizeof(PBVHNode)); - memset(bvh->nodes + bvh->totnode, 0, (bvh->node_mem_count - bvh->totnode) * sizeof(PBVHNode)); - MEM_freeN(prev); + bvh->nodes = MEM_recallocN(bvh->nodes, sizeof(PBVHNode) * bvh->node_mem_count); } bvh->totnode = totnode; @@ -699,16 +694,16 @@ static void pbvh_iter_end(PBVHIter *iter) static void pbvh_stack_push(PBVHIter *iter, PBVHNode *node, int revisiting) { - if (iter->stacksize == iter->stackspace) { - PBVHStack *newstack; - + if (UNLIKELY(iter->stacksize == iter->stackspace)) { iter->stackspace *= 2; - newstack = MEM_callocN(sizeof(PBVHStack) * iter->stackspace, "PBVHStack"); - memcpy(newstack, iter->stack, sizeof(PBVHStack) * iter->stacksize); - if (iter->stackspace > STACK_FIXED_DEPTH) - MEM_freeN(iter->stack); - iter->stack = newstack; + if (iter->stackspace != STACK_FIXED_DEPTH) { + iter->stack = MEM_reallocN(iter->stack, sizeof(PBVHStack) * iter->stackspace); + } + else { + iter->stack = MEM_mallocN(sizeof(PBVHStack) * iter->stackspace, "PBVHStack"); + memcpy(iter->stack, iter->stackfixed, sizeof(PBVHStack) * iter->stacksize); + } } iter->stack[iter->stacksize].node = node; @@ -800,7 +795,7 @@ void BKE_pbvh_search_gather(PBVH *bvh, while ((node = pbvh_iter_next(&iter))) { if (node->flag & PBVH_Leaf) { - if (tot == space) { + if (UNLIKELY(tot == space)) { /* resize array if needed */ space = (tot == 0) ? 32 : space * 2; array = MEM_recallocN_id(array, sizeof(PBVHNode *) * space, __func__); |