diff options
Diffstat (limited to 'gfx/src/asset/asset_cache.c')
-rw-r--r-- | gfx/src/asset/asset_cache.c | 47 |
1 files changed, 17 insertions, 30 deletions
diff --git a/gfx/src/asset/asset_cache.c b/gfx/src/asset/asset_cache.c index 0c6a8dc..2fa57ad 100644 --- a/gfx/src/asset/asset_cache.c +++ b/gfx/src/asset/asset_cache.c | |||
@@ -4,13 +4,11 @@ | |||
4 | #include <gfx/gfx.h> | 4 | #include <gfx/gfx.h> |
5 | #include <gfx/util/scene.h> | 5 | #include <gfx/util/scene.h> |
6 | #include <gfx/util/texture.h> | 6 | #include <gfx/util/texture.h> |
7 | #include <gfx_assert.h> | ||
7 | 8 | ||
8 | #include <cstring.h> | 9 | #include <cstring.h> |
9 | #include <log/log.h> | 10 | #include <log/log.h> |
10 | 11 | ||
11 | #include <assert.h> | ||
12 | #include <stddef.h> | ||
13 | |||
14 | static Hash calc_scene_hash(const LoadSceneCmd* cmd) { | 12 | static Hash calc_scene_hash(const LoadSceneCmd* cmd) { |
15 | assert(cmd); | 13 | assert(cmd); |
16 | switch (cmd->origin) { | 14 | switch (cmd->origin) { |
@@ -19,7 +17,7 @@ static Hash calc_scene_hash(const LoadSceneCmd* cmd) { | |||
19 | case AssetFromMemory: | 17 | case AssetFromMemory: |
20 | return (Hash)cmd->data; | 18 | return (Hash)cmd->data; |
21 | } | 19 | } |
22 | assert(false); | 20 | FAIL("Unhandled scene asset origin"); |
23 | return 0; | 21 | return 0; |
24 | } | 22 | } |
25 | 23 | ||
@@ -59,7 +57,7 @@ static Hash calc_texture_hash(const LoadTextureCmd* cmd) { | |||
59 | } | 57 | } |
60 | break; | 58 | break; |
61 | } | 59 | } |
62 | assert(false); | 60 | FAIL("Unhandled texture asset origin"); |
63 | return 0; | 61 | return 0; |
64 | } | 62 | } |
65 | 63 | ||
@@ -73,25 +71,16 @@ static Asset* lookup_cache(AssetCache* cache, Hash hash) { | |||
73 | return 0; | 71 | return 0; |
74 | } | 72 | } |
75 | 73 | ||
76 | // TODO: questionable function. Make mempool_alloc() fail when out of memory. | ||
77 | static void insert_into_cache(AssetCache* cache, const Asset* asset) { | ||
78 | assert(cache); | ||
79 | assert(asset); | ||
80 | Asset* poolAsset = mempool_alloc(&cache->assets); | ||
81 | assert(asset); | ||
82 | *poolAsset = *asset; | ||
83 | } | ||
84 | |||
85 | static void log_scene_cache_hit(const LoadSceneCmd* cmd, Hash hash) { | 74 | static void log_scene_cache_hit(const LoadSceneCmd* cmd, Hash hash) { |
86 | assert(cmd); | 75 | assert(cmd); |
87 | switch (cmd->origin) { | 76 | switch (cmd->origin) { |
88 | case AssetFromFile: | 77 | case AssetFromFile: |
89 | LOGI( | 78 | LOGD( |
90 | "Found asset [%s] in cache with hash [%lu]", | 79 | "Found asset [%s] in cache with hash [%lu]", |
91 | mstring_cstr(&cmd->filepath), hash); | 80 | mstring_cstr(&cmd->filepath), hash); |
92 | break; | 81 | break; |
93 | case AssetFromMemory: | 82 | case AssetFromMemory: |
94 | LOGI("Found asset [%p] in cache with hash [%lu]", cmd->data, hash); | 83 | LOGD("Found asset [%p] in cache with hash [%lu]", cmd->data, hash); |
95 | break; | 84 | break; |
96 | } | 85 | } |
97 | } | 86 | } |
@@ -100,10 +89,10 @@ static void log_scene_loaded(const LoadSceneCmd* cmd) { | |||
100 | assert(cmd); | 89 | assert(cmd); |
101 | switch (cmd->origin) { | 90 | switch (cmd->origin) { |
102 | case AssetFromFile: | 91 | case AssetFromFile: |
103 | LOGI("Loaded asset from file: [%s]", mstring_cstr(&cmd->filepath)); | 92 | LOGD("Loaded asset from file: [%s]", mstring_cstr(&cmd->filepath)); |
104 | break; | 93 | break; |
105 | case AssetFromMemory: | 94 | case AssetFromMemory: |
106 | LOGI("Loaded asset from memory: [%p]", cmd->data); | 95 | LOGD("Loaded asset from memory: [%p]", cmd->data); |
107 | break; | 96 | break; |
108 | } | 97 | } |
109 | } | 98 | } |
@@ -143,12 +132,11 @@ SceneNode* gfx_load_scene( | |||
143 | // Load it, insert it into the cache, and return it. | 132 | // Load it, insert it into the cache, and return it. |
144 | SceneNode* node = gfx_scene_load(gfx, root_node, cmd); | 133 | SceneNode* node = gfx_scene_load(gfx, root_node, cmd); |
145 | if (node) { | 134 | if (node) { |
146 | insert_into_cache( | 135 | *(Asset*)mempool_alloc(&cache->assets) = (Asset){ |
147 | cache, &(Asset){ | 136 | .type = SceneAsset, |
148 | .type = SceneAsset, | 137 | .hash = hash, |
149 | .hash = hash, | 138 | .data = node, |
150 | .data = node, | 139 | }; |
151 | }); | ||
152 | log_scene_loaded(cmd); | 140 | log_scene_loaded(cmd); |
153 | } | 141 | } |
154 | return node; | 142 | return node; |
@@ -172,12 +160,11 @@ Texture* gfx_load_texture(Gfx* gfx, const LoadTextureCmd* cmd) { | |||
172 | RenderBackend* render_backend = gfx_get_render_backend(gfx); | 160 | RenderBackend* render_backend = gfx_get_render_backend(gfx); |
173 | Texture* texture = gfx_texture_load(render_backend, cmd); | 161 | Texture* texture = gfx_texture_load(render_backend, cmd); |
174 | if (texture) { | 162 | if (texture) { |
175 | insert_into_cache( | 163 | *(Asset*)mempool_alloc(&cache->assets) = (Asset){ |
176 | cache, &(Asset){ | 164 | .type = TextureAsset, |
177 | .type = TextureAsset, | 165 | .hash = hash, |
178 | .hash = hash, | 166 | .data = texture, |
179 | .data = texture, | 167 | }; |
180 | }); | ||
181 | } | 168 | } |
182 | return texture; | 169 | return texture; |
183 | } | 170 | } |