summaryrefslogtreecommitdiffstats
path: root/libdimension/dimension
diff options
context:
space:
mode:
Diffstat (limited to 'libdimension/dimension')
-rw-r--r--libdimension/dimension/csg.h14
-rw-r--r--libdimension/dimension/object.h24
-rw-r--r--libdimension/dimension/objects.h24
3 files changed, 30 insertions, 32 deletions
diff --git a/libdimension/dimension/csg.h b/libdimension/dimension/csg.h
index 9d86f71..9e29019 100644
--- a/libdimension/dimension/csg.h
+++ b/libdimension/dimension/csg.h
@@ -1,5 +1,5 @@
/*************************************************************************
- * Copyright (C) 2010 Tavian Barnes <tavianator@tavianator.com> *
+ * Copyright (C) 2010-2014 Tavian Barnes <tavianator@tavianator.com> *
* *
* This file is part of The Dimension Library. *
* *
@@ -25,31 +25,35 @@
/**
* CSG union.
+ * @param[in] pool The memory pool to allocate from.
* @param[in] objects The objects from which to compose the union.
* @return A union of the objects in \p objects.
*/
-dmnsn_object *dmnsn_new_csg_union(const dmnsn_array *objects);
+dmnsn_object *dmnsn_new_csg_union(dmnsn_pool *pool, const dmnsn_array *objects);
/**
* CSG intersection.
+ * @param[in] pool The memory pool to allocate from.
* @param[in,out] A The first object.
* @param[in,out] B The second object.
* @return The intersection of \p A and \p B.
*/
-dmnsn_object *dmnsn_new_csg_intersection(dmnsn_object *A, dmnsn_object *B);
+dmnsn_object *dmnsn_new_csg_intersection(dmnsn_pool *pool, dmnsn_object *A, dmnsn_object *B);
/**
* CSG intersection.
+ * @param[in] pool The memory pool to allocate from.
* @param[in,out] A The outer object.
* @param[in,out] B The inner object.
* @return The difference between \p A and \p B.
*/
-dmnsn_object *dmnsn_new_csg_difference(dmnsn_object *A, dmnsn_object *B);
+dmnsn_object *dmnsn_new_csg_difference(dmnsn_pool *pool, dmnsn_object *A, dmnsn_object *B);
/**
* CSG Merge.
+ * @param[in] pool The memory pool to allocate from.
* @param[in,out] A The first object.
* @param[in,out] B The second object.
* @return The merge of \p A and \p B.
*/
-dmnsn_object *dmnsn_new_csg_merge(dmnsn_object *A, dmnsn_object *B);
+dmnsn_object *dmnsn_new_csg_merge(dmnsn_pool *pool, dmnsn_object *A, dmnsn_object *B);
diff --git a/libdimension/dimension/object.h b/libdimension/dimension/object.h
index 75a8aa7..9724dec 100644
--- a/libdimension/dimension/object.h
+++ b/libdimension/dimension/object.h
@@ -67,12 +67,6 @@ typedef bool dmnsn_object_intersection_fn(const dmnsn_object *object,
typedef bool dmnsn_object_inside_fn(const dmnsn_object *object,
dmnsn_vector point);
-/**
- * Object destruction callback.
- * @param[in,out] object The object to delete.
- */
-typedef void dmnsn_object_free_fn(dmnsn_object *object);
-
/** An object. */
struct dmnsn_object {
dmnsn_texture *texture; /**< Surface properties. */
@@ -88,32 +82,26 @@ struct dmnsn_object {
dmnsn_array *children; /**< Child objects. */
bool split_children; /**< Whether the child objects can be split. */
- dmnsn_object_initialize_fn *initialize_fn; /**< Initialization callback. */
+ dmnsn_object_initialize_fn *initialize_fn; /**< Initialization callback. */
dmnsn_object_intersection_fn *intersection_fn; /**< Intersection callback. */
- dmnsn_object_inside_fn *inside_fn; /**< Inside callback. */
- dmnsn_object_free_fn *free_fn; /**< Destruction callback. */
+ dmnsn_object_inside_fn *inside_fn; /**< Inside callback. */
- DMNSN_REFCOUNT; /**< Reference count. */
bool initialized; /**< @internal Whether the object is initialized yet. */
};
/**
* Allocate a dummy object.
+ * @param[in] pool The memory pool to allocate from.
* @return The allocated object.
*/
-dmnsn_object *dmnsn_new_object(void);
+dmnsn_object *dmnsn_new_object(dmnsn_pool *pool);
/**
* Initialize a dmnsn_object field.
+ * @param[in] pool The memory pool to allocate from.
* @param[out] object The object to initialize.
*/
-void dmnsn_init_object(dmnsn_object *object);
-
-/**
- * Free an object
- * @param[in,out] object The object to destroy.
- */
-void dmnsn_delete_object(dmnsn_object *object);
+void dmnsn_init_object(dmnsn_pool *pool, dmnsn_object *object);
/**
* Initialize an object and potentially its children.
diff --git a/libdimension/dimension/objects.h b/libdimension/dimension/objects.h
index 9ce9e46..eb476cf 100644
--- a/libdimension/dimension/objects.h
+++ b/libdimension/dimension/objects.h
@@ -1,5 +1,5 @@
/*************************************************************************
- * Copyright (C) 2009-2011 Tavian Barnes <tavianator@tavianator.com> *
+ * Copyright (C) 2009-2014 Tavian Barnes <tavianator@tavianator.com> *
* *
* This file is part of The Dimension Library. *
* *
@@ -27,6 +27,7 @@
/**
* A triangle, with normals interpolated between the points.
+ * @param[in] pool The memory pool to allocate from.
* @param[in] a The first corner of the triangle.
* @param[in] b The second corner of the triangle.
* @param[in] c The third corner of the triangle.
@@ -35,52 +36,57 @@
* @param[in] nc The normal at \p c.
*/
dmnsn_object *dmnsn_new_triangle(
+ dmnsn_pool *pool,
dmnsn_vector a, dmnsn_vector b, dmnsn_vector c,
dmnsn_vector na, dmnsn_vector nb, dmnsn_vector nc
);
/**
* A flat triangle, without normal interpolation.
+ * @param[in] pool The memory pool to allocate from.
* @param[in] a The first corner of the triangle.
* @param[in] b The second corner of the triangle.
* @param[in] c The third corner of the triangle.
*/
-dmnsn_object *dmnsn_new_flat_triangle(
- dmnsn_vector a, dmnsn_vector b, dmnsn_vector c
-);
+dmnsn_object *dmnsn_new_flat_triangle(dmnsn_pool *pool, dmnsn_vector a, dmnsn_vector b, dmnsn_vector c);
/**
* A plane.
+ * @param[in] pool The memory pool to allocate from.
* @param[in] normal The normal vector of the plane.
* @return A plane through the origin, with the given normal.
*/
-dmnsn_object *dmnsn_new_plane(dmnsn_vector normal);
+dmnsn_object *dmnsn_new_plane(dmnsn_pool *pool, dmnsn_vector normal);
/**
* A sphere.
+ * @param[in] pool The memory pool to allocate from.
* @return A sphere of radius 1, centered at the origin.
*/
-dmnsn_object *dmnsn_new_sphere(void);
+dmnsn_object *dmnsn_new_sphere(dmnsn_pool *pool);
/**
* A cube.
+ * @param[in] pool The memory pool to allocate from.
* @return An axis-aligned cube, from (-1, -1, -1) to (1, 1, 1).
*/
-dmnsn_object *dmnsn_new_cube(void);
+dmnsn_object *dmnsn_new_cube(dmnsn_pool *pool);
/**
* A cylinder/cone.
+ * @param[in] pool The memory pool to allocate from.
* @param[in] r1 The bottom radius.
* @param[in] r2 The top radius.
* @param[in] open Whether to render caps.
* @return A cone slice, from r = \p r1 at y = -1, to r = \p r2 at y = 1
*/
-dmnsn_object *dmnsn_new_cone(double r1, double r2, bool open);
+dmnsn_object *dmnsn_new_cone(dmnsn_pool *pool, double r1, double r2, bool open);
/**
* A torus.
+ * @param[in] pool The memory pool to allocate from.
* @param[in] major The major radius.
* @param[in] minor The minor radius.
* @return A torus, centered at the origin and lying in the x-z plane.
*/
-dmnsn_object *dmnsn_new_torus(double major, double minor);
+dmnsn_object *dmnsn_new_torus(dmnsn_pool *pool, double major, double minor);