From 180714c96505c53d380e2f205034f587cab0466d Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sat, 31 May 2014 15:34:59 -0400 Subject: object: Use pool. --- libdimension/dimension/csg.h | 14 +++++++++----- libdimension/dimension/object.h | 24 ++++++------------------ libdimension/dimension/objects.h | 24 +++++++++++++++--------- 3 files changed, 30 insertions(+), 32 deletions(-) (limited to 'libdimension/dimension') 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 * + * Copyright (C) 2010-2014 Tavian Barnes * * * * 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 * + * Copyright (C) 2009-2014 Tavian Barnes * * * * 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); -- cgit v1.2.3