summaryrefslogtreecommitdiffstats
path: root/libdimension/camera.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2014-05-26 16:20:25 -0400
committerTavian Barnes <tavianator@tavianator.com>2014-05-26 16:20:25 -0400
commit036123cc8bb3f1b0ef96f6bd15f0c4d0eefe571e (patch)
tree3164d211a742e8a3ea9af5183512fbafbe66bc0c /libdimension/camera.c
parentdd8af3177f861c484317f312fa9d64ecb3cd0921 (diff)
downloaddimension-036123cc8bb3f1b0ef96f6bd15f0c4d0eefe571e.tar.xz
camera: Kill the ->ptr field.
Diffstat (limited to 'libdimension/camera.c')
-rw-r--r--libdimension/camera.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/libdimension/camera.c b/libdimension/camera.c
index 1c5a1fc..38fde35 100644
--- a/libdimension/camera.c
+++ b/libdimension/camera.c
@@ -26,26 +26,35 @@
#include "dimension-internal.h"
#include <stdlib.h>
+static void dmnsn_default_camera_free_fn(dmnsn_camera *camera)
+{
+ dmnsn_free(camera);
+}
+
/* Allocate a new dummy camera */
dmnsn_camera *
dmnsn_new_camera(void)
{
dmnsn_camera *camera = DMNSN_MALLOC(dmnsn_camera);
- camera->free_fn = NULL;
- camera->trans = dmnsn_identity_matrix();
- DMNSN_REFCOUNT_INIT(camera);
+ dmnsn_init_camera(camera);
return camera;
}
+/* Initialize a camera */
+void
+dmnsn_init_camera(dmnsn_camera *camera)
+{
+ camera->free_fn = dmnsn_default_camera_free_fn;
+ camera->trans = dmnsn_identity_matrix();
+ DMNSN_REFCOUNT_INIT(camera);
+}
+
/* Free a dummy camera */
void
dmnsn_delete_camera(dmnsn_camera *camera)
{
if (DMNSN_DECREF(camera)) {
- if (camera->free_fn) {
- camera->free_fn(camera->ptr);
- }
- dmnsn_free(camera);
+ camera->free_fn(camera);
}
}