summaryrefslogtreecommitdiff
path: root/sprite.c
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2006-04-20 20:51:57 +0000
committerpeter1138 <peter1138@openttd.org>2006-04-20 20:51:57 +0000
commit103a2aa1164fe92552cfe64c46d99b4b7dd5e82a (patch)
tree097bbbafd144f585288535083f426339d840e0f4 /sprite.c
parentc8b1ff8654708fa0b156bb0936c5bb7053850854 (diff)
downloadopenttd-103a2aa1164fe92552cfe64c46d99b4b7dd5e82a.tar.xz
(svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
reduces the amount of house keeping we do and the chance of memory leaks.
Diffstat (limited to 'sprite.c')
-rw-r--r--sprite.c71
1 files changed, 0 insertions, 71 deletions
diff --git a/sprite.c b/sprite.c
index 47d0c1c8b..83d60cd43 100644
--- a/sprite.c
+++ b/sprite.c
@@ -97,74 +97,3 @@ byte RandomizedSpriteGroupTriggeredBits(const RandomizedSpriteGroup *rsg,
return (rsg->num_groups - 1) << rsg->lowest_randbit;
}
-
-/**
- * Traverse a sprite group and release its and its child's memory.
- * A group is only released if its reference count is zero.
- * We pass a pointer to a pointer so that the original reference can be set to NULL.
- * @param group_ptr Pointer to sprite group reference.
- */
-void UnloadSpriteGroup(SpriteGroup **group_ptr)
-{
- SpriteGroup *group;
- int i;
-
- assert(group_ptr != NULL);
- assert(*group_ptr != NULL);
-
- group = *group_ptr;
- *group_ptr = NULL; // Remove this reference.
-
- group->ref_count--;
- if (group->ref_count > 0) {
- DEBUG(grf, 6)("UnloadSpriteGroup: Group at `%p' (type %d) has %d reference(s) left.", group, group->type, group->ref_count);
- return; // Still some references left, so don't clear up.
- }
-
- DEBUG(grf, 6)("UnloadSpriteGroup: Releasing group at `%p'.", group);
- switch (group->type) {
- case SGT_REAL:
- {
- RealSpriteGroup *rsg = &group->g.real;
- for (i = 0; i < rsg->loading_count; i++) {
- if (rsg->loading[i] != NULL) UnloadSpriteGroup(&rsg->loading[i]);
- }
- for (i = 0; i < rsg->loaded_count; i++) {
- if (rsg->loaded[i] != NULL) UnloadSpriteGroup(&rsg->loaded[i]);
- }
- free(group->g.real.loaded);
- free(group->g.real.loading);
- free(group);
- return;
- }
-
- case SGT_DETERMINISTIC:
- {
- DeterministicSpriteGroup *dsg = &group->g.determ;
- for (i = 0; i < group->g.determ.num_ranges; i++) {
- if (dsg->ranges[i].group != NULL) UnloadSpriteGroup(&dsg->ranges[i].group);
- }
- if (dsg->default_group != NULL) UnloadSpriteGroup(&dsg->default_group);
- free(group->g.determ.ranges);
- free(group);
- return;
- }
-
- case SGT_RANDOMIZED:
- {
- for (i = 0; i < group->g.random.num_groups; i++) {
- if (group->g.random.groups[i] != NULL) UnloadSpriteGroup(&group->g.random.groups[i]);
- }
- free(group->g.random.groups);
- free(group);
- return;
- }
-
- case SGT_CALLBACK:
- case SGT_RESULT:
- free(group);
- return;
- }
-
- DEBUG(grf, 1)("Unable to remove unknown sprite group type `0x%x'.", group->type);
-}