Kohi Game Engine
asset_system.h
Go to the documentation of this file.
1 
15 #pragma once
16 
17 #include <assets/kasset_types.h>
18 #include <strings/kname.h>
19 
20 typedef struct asset_system_config {
21  // The maximum number of assets which may be loaded at once.
23 
26 
27 struct asset_system_state;
28 
36 KAPI b8 asset_system_deserialize_config(const char* config_str, asset_system_config* out_config);
37 
47 KAPI b8 asset_system_initialize(u64* memory_requirement, struct asset_system_state* state, const asset_system_config* config);
48 
54 KAPI void asset_system_shutdown(struct asset_system_state* state);
55 
56 #if KOHI_HOT_RELOAD
57 KAPI u32 _asset_system_watch_for_reload(struct asset_system_state* state, kasset_type type, kname asset_name, kname package_name);
58 KAPI void _asset_system_stop_watch(struct asset_system_state* state, u32 watch_id);
59 
60 # define asset_system_watch_for_reload(state, type, asset_name, package_name) _asset_system_watch_for_reload(state, type, asset_name, package_name)
61 # define asset_system_stop_watch(state, watch_id) _asset_system_stop_watch(state, watch_id)
62 
63 #else
64 # define asset_system_watch_for_reload(state, type, asset_name, package_name)
65 # define asset_system_stop_watch(state, watch_id)
66 #endif
67 
68 // ////////////////////////////////////
69 // BINARY ASSETS
70 // ////////////////////////////////////
71 
72 typedef void (*PFN_kasset_binary_loaded_callback)(void* listener, kasset_binary* asset);
73 // async load from game package.
74 KAPI kasset_binary* asset_system_request_binary(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_binary_loaded_callback callback);
75 // sync load from game package.
76 KAPI kasset_binary* asset_system_request_binary_sync(struct asset_system_state* state, const char* name);
77 // async load from specific package.
78 KAPI kasset_binary* asset_system_request_binary_from_package(struct asset_system_state* state, const char* package_name, const char* name, void* listener, PFN_kasset_binary_loaded_callback callback);
79 // sync load from specific package.
80 KAPI kasset_binary* asset_system_request_binary_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
81 
82 KAPI void asset_system_release_binary(struct asset_system_state* state, kasset_binary* asset);
83 
84 // ////////////////////////////////////
85 // TEXT ASSETS
86 // ////////////////////////////////////
87 
88 // sync load from game package.
89 KAPI kasset_text* asset_system_request_text_sync(struct asset_system_state* state, const char* name);
90 // sync load from specific package.
91 KAPI kasset_text* asset_system_request_text_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
92 
93 KAPI void asset_system_release_text(struct asset_system_state* state, kasset_text* asset);
94 
95 // ////////////////////////////////////
96 // IMAGE ASSETS
97 // ////////////////////////////////////
98 
99 typedef void (*PFN_kasset_image_loaded_callback)(void* listener, kasset_image* asset);
100 // async load from game package.
101 KAPI kasset_image* asset_system_request_image(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_image_loaded_callback callback);
102 // sync load from game package.
103 KAPI kasset_image* asset_system_request_image_sync(struct asset_system_state* state, const char* name);
104 // async load from specific package.
105 KAPI kasset_image* asset_system_request_image_from_package(struct asset_system_state* state, const char* package_name, const char* name, void* listener, PFN_kasset_image_loaded_callback callback);
106 // sync load from specific package.
107 KAPI kasset_image* asset_system_request_image_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
108 
109 KAPI void asset_system_release_image(struct asset_system_state* state, kasset_image* asset);
110 
111 // ////////////////////////////////////
112 // BITMAP FONT ASSETS
113 // ////////////////////////////////////
114 
115 // sync load from game package.
116 KAPI kasset_bitmap_font* asset_system_request_bitmap_font_sync(struct asset_system_state* state, const char* name);
117 // sync load from specific package.
118 KAPI kasset_bitmap_font* asset_system_request_bitmap_font_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
119 
120 KAPI void asset_system_release_bitmap_font(struct asset_system_state* state, kasset_bitmap_font* asset);
121 
122 // ////////////////////////////////////
123 // SYSTEM FONT ASSETS
124 // ////////////////////////////////////
125 
126 // sync load from game package.
127 KAPI kasset_system_font* asset_system_request_system_font_sync(struct asset_system_state* state, const char* name);
128 
129 // sync load from specific package.
130 KAPI kasset_system_font* asset_system_request_system_font_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
131 
132 KAPI void asset_system_release_system_font(struct asset_system_state* state, kasset_system_font* asset);
133 
134 // ////////////////////////////////////
135 // STATIC MESH ASSETS
136 // ////////////////////////////////////
137 
138 typedef void (*PFN_kasset_static_mesh_loaded_callback)(void* listener, kasset_static_mesh* asset);
139 
140 // async load from game package.
141 KAPI kasset_static_mesh* asset_system_request_static_mesh(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_static_mesh_loaded_callback callback);
142 // sync load from game package.
143 KAPI kasset_static_mesh* asset_system_request_static_mesh_sync(struct asset_system_state* state, const char* name);
144 // async load from specific package.
145 KAPI kasset_static_mesh* asset_system_request_static_mesh_from_package(struct asset_system_state* state, const char* package_name, const char* name, void* listener, PFN_kasset_static_mesh_loaded_callback callback);
146 // sync load from specific package.
147 KAPI kasset_static_mesh* asset_system_request_static_mesh_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
148 
149 KAPI void asset_system_release_static_mesh(struct asset_system_state* state, kasset_static_mesh* asset);
150 
151 // ////////////////////////////////////
152 // HEIGHTMAP TERRAIN ASSETS
153 // ////////////////////////////////////
154 
156 
157 // async load from game package.
158 KAPI kasset_heightmap_terrain* asset_system_request_heightmap_terrain(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_heightmap_terrain_loaded_callback callback);
159 // sync load from game package.
160 KAPI kasset_heightmap_terrain* asset_system_request_heightmap_terrain_sync(struct asset_system_state* state, const char* name);
161 // async load from specific package.
162 KAPI kasset_heightmap_terrain* asset_system_request_heightmap_terrain_from_package(struct asset_system_state* state, const char* package_name, const char* name, void* listener, PFN_kasset_heightmap_terrain_loaded_callback callback);
163 // sync load from specific package.
164 KAPI kasset_heightmap_terrain* asset_system_request_heightmap_terrain_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
165 
166 KAPI void asset_system_release_heightmap_terrain(struct asset_system_state* state, kasset_heightmap_terrain* asset);
167 
168 // ////////////////////////////////////
169 // MATERIAL ASSETS
170 // ////////////////////////////////////
171 
172 typedef void (*PFN_kasset_material_loaded_callback)(void* listener, kasset_material* asset);
173 
174 // async load from game package.
175 KAPI kasset_material* asset_system_request_material(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_material_loaded_callback callback);
176 // sync load from game package.
177 KAPI kasset_material* asset_system_terrain_request_material_sync(struct asset_system_state* state, const char* name);
178 // async load from specific package.
179 KAPI kasset_material* asset_system_request_material_from_package(struct asset_system_state* state, const char* package_name, const char* name, void* listener, PFN_kasset_material_loaded_callback callback);
180 // sync load from specific package.
181 KAPI kasset_material* asset_system_request_material_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
182 
183 KAPI void asset_system_release_material(struct asset_system_state* state, kasset_material* asset);
184 
185 // ////////////////////////////////////
186 // AUDIO ASSETS
187 // ////////////////////////////////////
188 
189 typedef void (*PFN_kasset_audio_loaded_callback)(void* listener, kasset_audio* asset);
190 
191 // async load from game package.
192 KAPI kasset_audio* asset_system_request_audio(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_audio_loaded_callback callback);
193 // sync load from game package.
194 KAPI kasset_audio* asset_system_terrain_request_audio_sync(struct asset_system_state* state, const char* name);
195 // async load from specific package.
196 KAPI kasset_audio* asset_system_request_audio_from_package(struct asset_system_state* state, const char* package_name, const char* name, void* listener, PFN_kasset_audio_loaded_callback callback);
197 // sync load from specific package.
198 KAPI kasset_audio* asset_system_request_audio_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
199 
200 KAPI void asset_system_release_audio(struct asset_system_state* state, kasset_audio* asset);
201 
202 // ////////////////////////////////////
203 // SCENE ASSETS
204 // ////////////////////////////////////
205 
206 // sync load from game package.
207 KAPI kasset_scene* asset_system_request_scene_sync(struct asset_system_state* state, const char* name);
208 // sync load from specific package.
209 KAPI kasset_scene* asset_system_request_scene_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
210 
211 KAPI void asset_system_release_scene(struct asset_system_state* state, kasset_scene* asset);
212 
213 // ////////////////////////////////////
214 // SHADER ASSETS
215 // ////////////////////////////////////
216 
217 // sync load from game package.
218 KAPI kasset_shader* asset_system_terrain_request_shader_sync(struct asset_system_state* state, const char* name);
219 
220 // sync load from specific package.
221 KAPI kasset_shader* asset_system_request_shader_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
222 
223 KAPI void asset_system_release_shader(struct asset_system_state* state, kasset_shader* asset);
224 
225 KAPI b8 asset_system_shader_watch(struct asset_system_state* state, kasset_shader* shader, const char* package_name, const char* name, u32* out_watch_id);
KAPI void asset_system_release_heightmap_terrain(struct asset_system_state *state, kasset_heightmap_terrain *asset)
KAPI kasset_scene * asset_system_request_scene_sync(struct asset_system_state *state, const char *name)
KAPI kasset_material * asset_system_request_material_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI kasset_static_mesh * asset_system_request_static_mesh(struct asset_system_state *state, const char *name, void *listener, PFN_kasset_static_mesh_loaded_callback callback)
KAPI b8 asset_system_initialize(u64 *memory_requirement, struct asset_system_state *state, const asset_system_config *config)
Initializes the asset system. Call twice; once to get the memory requirement (pass 0 to state and con...
KAPI kasset_bitmap_font * asset_system_request_bitmap_font_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI kasset_image * asset_system_request_image_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
void(* PFN_kasset_image_loaded_callback)(void *listener, kasset_image *asset)
Definition: asset_system.h:99
KAPI void asset_system_release_text(struct asset_system_state *state, kasset_text *asset)
KAPI kasset_material * asset_system_request_material_from_package(struct asset_system_state *state, const char *package_name, const char *name, void *listener, PFN_kasset_material_loaded_callback callback)
KAPI kasset_audio * asset_system_request_audio(struct asset_system_state *state, const char *name, void *listener, PFN_kasset_audio_loaded_callback callback)
KAPI kasset_heightmap_terrain * asset_system_request_heightmap_terrain_from_package(struct asset_system_state *state, const char *package_name, const char *name, void *listener, PFN_kasset_heightmap_terrain_loaded_callback callback)
KAPI void asset_system_shutdown(struct asset_system_state *state)
Shuts the system down.
KAPI void asset_system_release_shader(struct asset_system_state *state, kasset_shader *asset)
void(* PFN_kasset_heightmap_terrain_loaded_callback)(void *listener, kasset_heightmap_terrain *asset)
Definition: asset_system.h:155
KAPI kasset_audio * asset_system_request_audio_from_package(struct asset_system_state *state, const char *package_name, const char *name, void *listener, PFN_kasset_audio_loaded_callback callback)
KAPI kasset_static_mesh * asset_system_request_static_mesh_from_package(struct asset_system_state *state, const char *package_name, const char *name, void *listener, PFN_kasset_static_mesh_loaded_callback callback)
void(* PFN_kasset_audio_loaded_callback)(void *listener, kasset_audio *asset)
Definition: asset_system.h:189
KAPI kasset_shader * asset_system_terrain_request_shader_sync(struct asset_system_state *state, const char *name)
KAPI kasset_text * asset_system_request_text_sync(struct asset_system_state *state, const char *name)
KAPI kasset_image * asset_system_request_image(struct asset_system_state *state, const char *name, void *listener, PFN_kasset_image_loaded_callback callback)
KAPI kasset_bitmap_font * asset_system_request_bitmap_font_sync(struct asset_system_state *state, const char *name)
KAPI kasset_static_mesh * asset_system_request_static_mesh_sync(struct asset_system_state *state, const char *name)
KAPI kasset_text * asset_system_request_text_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI kasset_system_font * asset_system_request_system_font_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI kasset_material * asset_system_request_material(struct asset_system_state *state, const char *name, void *listener, PFN_kasset_material_loaded_callback callback)
KAPI kasset_binary * asset_system_request_binary_sync(struct asset_system_state *state, const char *name)
KAPI void asset_system_release_material(struct asset_system_state *state, kasset_material *asset)
KAPI b8 asset_system_deserialize_config(const char *config_str, asset_system_config *out_config)
Deserializes configuration for the asset system from the provided string.
KAPI kasset_binary * asset_system_request_binary_from_package(struct asset_system_state *state, const char *package_name, const char *name, void *listener, PFN_kasset_binary_loaded_callback callback)
KAPI kasset_heightmap_terrain * asset_system_request_heightmap_terrain(struct asset_system_state *state, const char *name, void *listener, PFN_kasset_heightmap_terrain_loaded_callback callback)
KAPI kasset_heightmap_terrain * asset_system_request_heightmap_terrain_sync(struct asset_system_state *state, const char *name)
void(* PFN_kasset_material_loaded_callback)(void *listener, kasset_material *asset)
Definition: asset_system.h:172
struct asset_system_config asset_system_config
KAPI b8 asset_system_shader_watch(struct asset_system_state *state, kasset_shader *shader, const char *package_name, const char *name, u32 *out_watch_id)
KAPI void asset_system_release_system_font(struct asset_system_state *state, kasset_system_font *asset)
void(* PFN_kasset_binary_loaded_callback)(void *listener, kasset_binary *asset)
Definition: asset_system.h:72
KAPI kasset_shader * asset_system_request_shader_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI kasset_heightmap_terrain * asset_system_request_heightmap_terrain_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI void asset_system_release_scene(struct asset_system_state *state, kasset_scene *asset)
void(* PFN_kasset_static_mesh_loaded_callback)(void *listener, kasset_static_mesh *asset)
Definition: asset_system.h:138
KAPI kasset_audio * asset_system_request_audio_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI void asset_system_release_audio(struct asset_system_state *state, kasset_audio *asset)
KAPI kasset_image * asset_system_request_image_sync(struct asset_system_state *state, const char *name)
KAPI void asset_system_release_static_mesh(struct asset_system_state *state, kasset_static_mesh *asset)
KAPI kasset_image * asset_system_request_image_from_package(struct asset_system_state *state, const char *package_name, const char *name, void *listener, PFN_kasset_image_loaded_callback callback)
KAPI void asset_system_release_image(struct asset_system_state *state, kasset_image *asset)
KAPI kasset_binary * asset_system_request_binary_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI kasset_binary * asset_system_request_binary(struct asset_system_state *state, const char *name, void *listener, PFN_kasset_binary_loaded_callback callback)
KAPI kasset_audio * asset_system_terrain_request_audio_sync(struct asset_system_state *state, const char *name)
KAPI kasset_scene * asset_system_request_scene_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI void asset_system_release_binary(struct asset_system_state *state, kasset_binary *asset)
KAPI kasset_system_font * asset_system_request_system_font_sync(struct asset_system_state *state, const char *name)
KAPI kasset_static_mesh * asset_system_request_static_mesh_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI void asset_system_release_bitmap_font(struct asset_system_state *state, kasset_bitmap_font *asset)
KAPI kasset_material * asset_system_terrain_request_material_sync(struct asset_system_state *state, const char *name)
#define KAPI
Import/export qualifier.
Definition: defines.h:205
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:25
_Bool b8
8-bit boolean type
Definition: defines.h:58
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:28
kasset_type
Definition: kasset_types.h:26
This files contains an implementation of knames.
u64 kname
A kname is a string hash made for quick comparisons versus traditional string comparisons.
Definition: kname.h:36
Definition: asset_system.h:20
kname default_package_name
Definition: asset_system.h:24
u32 max_asset_count
Definition: asset_system.h:22
Definition: kasset_types.h:449
Definition: kasset_types.h:306
Definition: kasset_types.h:432
Definition: kasset_types.h:188
Definition: kasset_types.h:200
Definition: kasset_types.h:235
Definition: kasset_types.h:321
Represents a shader asset, typically loaded from disk.
Definition: kasset_types.h:361
Represents a static mesh asset.
Definition: kasset_types.h:226
Definition: kasset_types.h:394
Definition: kasset_types.h:300