summaryrefslogtreecommitdiffstats
path: root/libdimension/csg.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2014-05-31 15:34:59 -0400
committerTavian Barnes <tavianator@tavianator.com>2014-05-31 15:34:59 -0400
commit180714c96505c53d380e2f205034f587cab0466d (patch)
tree62d1c654189abc715f2499e82345305417d31565 /libdimension/csg.c
parent74323fa54010d29737281579e4f3b4038da94989 (diff)
downloaddimension-180714c96505c53d380e2f205034f587cab0466d.tar.xz
object: Use pool.
Diffstat (limited to 'libdimension/csg.c')
-rw-r--r--libdimension/csg.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/libdimension/csg.c b/libdimension/csg.c
index 38c5983..b77b20e 100644
--- a/libdimension/csg.c
+++ b/libdimension/csg.c
@@ -67,31 +67,29 @@ dmnsn_csg_union_initialize_fn(dmnsn_object *object)
/** CSG union destruction callback. */
static void
-dmnsn_csg_union_free_fn(dmnsn_object *object)
+dmnsn_csg_union_cleanup(void *ptr)
{
- dmnsn_csg_union *csg = (dmnsn_csg_union *)object;
+ dmnsn_csg_union *csg = ptr;
dmnsn_delete_bvh(csg->bvh);
- dmnsn_free(csg);
}
/* Bulk-load a union */
dmnsn_object *
-dmnsn_new_csg_union(const dmnsn_array *objects)
+dmnsn_new_csg_union(dmnsn_pool *pool, const dmnsn_array *objects)
{
- dmnsn_csg_union *csg = DMNSN_MALLOC(dmnsn_csg_union);
+ dmnsn_csg_union *csg = DMNSN_PALLOC_TIDY(pool, dmnsn_csg_union, dmnsn_csg_union_cleanup);
csg->bvh = NULL;
dmnsn_object *object = &csg->object;
- dmnsn_init_object(object);
+ dmnsn_init_object(pool, object);
DMNSN_ARRAY_FOREACH (dmnsn_object **, child, objects) {
dmnsn_array_push(object->children, child);
}
- object->split_children = true;
+ object->split_children = true;
object->intersection_fn = dmnsn_csg_union_intersection_fn;
- object->inside_fn = dmnsn_csg_union_inside_fn;
- object->initialize_fn = dmnsn_csg_union_initialize_fn;
- object->free_fn = dmnsn_csg_union_free_fn;
+ object->inside_fn = dmnsn_csg_union_inside_fn;
+ object->initialize_fn = dmnsn_csg_union_initialize_fn;
return object;
}
@@ -207,16 +205,16 @@ dmnsn_csg_intersection_initialize_fn(dmnsn_object *csg)
}
dmnsn_object *
-dmnsn_new_csg_intersection(dmnsn_object *A, dmnsn_object *B)
+dmnsn_new_csg_intersection(dmnsn_pool *pool, dmnsn_object *A, dmnsn_object *B)
{
- dmnsn_object *csg = dmnsn_new_object();
+ dmnsn_object *csg = dmnsn_new_object(pool);
dmnsn_array_push(csg->children, &A);
dmnsn_array_push(csg->children, &B);
csg->intersection_fn = dmnsn_csg_intersection_intersection_fn;
- csg->inside_fn = dmnsn_csg_intersection_inside_fn;
- csg->initialize_fn = dmnsn_csg_intersection_initialize_fn;
+ csg->inside_fn = dmnsn_csg_intersection_inside_fn;
+ csg->initialize_fn = dmnsn_csg_intersection_initialize_fn;
return csg;
}
@@ -254,9 +252,9 @@ dmnsn_csg_difference_initialize_fn(dmnsn_object *csg)
}
dmnsn_object *
-dmnsn_new_csg_difference(dmnsn_object *A, dmnsn_object *B)
+dmnsn_new_csg_difference(dmnsn_pool *pool, dmnsn_object *A, dmnsn_object *B)
{
- dmnsn_object *csg = dmnsn_new_object();
+ dmnsn_object *csg = dmnsn_new_object(pool);
dmnsn_array_push(csg->children, &A);
dmnsn_array_push(csg->children, &B);
@@ -305,9 +303,9 @@ dmnsn_csg_merge_initialize_fn(dmnsn_object *csg)
}
dmnsn_object *
-dmnsn_new_csg_merge(dmnsn_object *A, dmnsn_object *B)
+dmnsn_new_csg_merge(dmnsn_pool *pool, dmnsn_object *A, dmnsn_object *B)
{
- dmnsn_object *csg = dmnsn_new_object();
+ dmnsn_object *csg = dmnsn_new_object(pool);
dmnsn_array_push(csg->children, &A);
dmnsn_array_push(csg->children, &B);