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 KAPI b8 asset_system_write_text(struct asset_system_state* state, kname package_name, kname asset_name, const char* content);
96 
97 // ////////////////////////////////////
98 // IMAGE ASSETS
99 // ////////////////////////////////////
100 
101 typedef void (*PFN_kasset_image_loaded_callback)(void* listener, kasset_image* asset);
102 // async load from game package.
103 KAPI kasset_image* asset_system_request_image(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_image_loaded_callback callback);
104 // sync load from game package.
105 KAPI kasset_image* asset_system_request_image_sync(struct asset_system_state* state, const char* name);
106 // async load from specific package.
107 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);
108 // sync load from specific package.
109 KAPI kasset_image* asset_system_request_image_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
110 
111 KAPI void asset_system_release_image(struct asset_system_state* state, kasset_image* asset);
112 
113 // ////////////////////////////////////
114 // BITMAP FONT ASSETS
115 // ////////////////////////////////////
116 
117 // sync load from game package.
118 KAPI kasset_bitmap_font* asset_system_request_bitmap_font_sync(struct asset_system_state* state, const char* name);
119 // sync load from specific package.
120 KAPI kasset_bitmap_font* asset_system_request_bitmap_font_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
121 
122 KAPI void asset_system_release_bitmap_font(struct asset_system_state* state, kasset_bitmap_font* asset);
123 
124 // ////////////////////////////////////
125 // SYSTEM FONT ASSETS
126 // ////////////////////////////////////
127 
128 // sync load from game package.
129 KAPI kasset_system_font* asset_system_request_system_font_sync(struct asset_system_state* state, const char* name);
130 
131 // sync load from specific package.
132 KAPI kasset_system_font* asset_system_request_system_font_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
133 
134 KAPI void asset_system_release_system_font(struct asset_system_state* state, kasset_system_font* asset);
135 
136 // ////////////////////////////////////
137 // MODEL ASSETS
138 // ////////////////////////////////////
139 
140 typedef void (*PFN_kasset_model_loaded_callback)(void* listener, kasset_model* asset);
141 
142 // async load from game package.
143 KAPI kasset_model* asset_system_request_model(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_model_loaded_callback callback);
144 // sync load from game package.
145 KAPI kasset_model* asset_system_request_model_sync(struct asset_system_state* state, const char* name);
146 // async load from specific package.
147 KAPI kasset_model* asset_system_request_model_from_package(struct asset_system_state* state, const char* package_name, const char* name, void* listener, PFN_kasset_model_loaded_callback callback);
148 // sync load from specific package.
149 KAPI kasset_model* asset_system_request_model_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
150 
151 KAPI void asset_system_release_model(struct asset_system_state* state, kasset_model* asset);
152 
153 // ////////////////////////////////////
154 // HEIGHTMAP TERRAIN ASSETS
155 // ////////////////////////////////////
156 
158 
159 // async load from game package.
160 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);
161 // sync load from game package.
162 KAPI kasset_heightmap_terrain* asset_system_request_heightmap_terrain_sync(struct asset_system_state* state, const char* name);
163 // async load from specific package.
164 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);
165 // sync load from specific package.
166 KAPI kasset_heightmap_terrain* asset_system_request_heightmap_terrain_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
167 
168 KAPI void asset_system_release_heightmap_terrain(struct asset_system_state* state, kasset_heightmap_terrain* asset);
169 
170 // ////////////////////////////////////
171 // MATERIAL ASSETS
172 // ////////////////////////////////////
173 
174 typedef void (*PFN_kasset_material_loaded_callback)(void* listener, kasset_material* asset);
175 
176 // async load from game package.
177 KAPI kasset_material* asset_system_request_material(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_material_loaded_callback callback);
178 // sync load from game package.
179 KAPI kasset_material* asset_system_request_material_sync(struct asset_system_state* state, const char* name);
180 // async load from specific package.
181 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);
182 // sync load from specific package.
183 KAPI kasset_material* asset_system_request_material_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
184 
185 KAPI void asset_system_release_material(struct asset_system_state* state, kasset_material* asset);
186 
187 // ////////////////////////////////////
188 // AUDIO ASSETS
189 // ////////////////////////////////////
190 
191 typedef void (*PFN_kasset_audio_loaded_callback)(void* listener, kasset_audio* asset);
192 
193 // async load from game package.
194 KAPI kasset_audio* asset_system_request_audio(struct asset_system_state* state, const char* name, void* listener, PFN_kasset_audio_loaded_callback callback);
195 // sync load from game package.
196 KAPI kasset_audio* asset_system_terrain_request_audio_sync(struct asset_system_state* state, const char* name);
197 // async load from specific package.
198 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);
199 // sync load from specific package.
200 KAPI kasset_audio* asset_system_request_audio_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
201 
202 KAPI void asset_system_release_audio(struct asset_system_state* state, kasset_audio* asset);
203 
204 // ////////////////////////////////////
205 // SHADER ASSETS
206 // ////////////////////////////////////
207 
208 // sync load from game package.
209 KAPI kasset_shader* asset_system_terrain_request_shader_sync(struct asset_system_state* state, const char* name);
210 
211 // sync load from specific package.
212 KAPI kasset_shader* asset_system_request_shader_from_package_sync(struct asset_system_state* state, const char* package_name, const char* name);
213 
214 KAPI void asset_system_release_shader(struct asset_system_state* state, kasset_shader* asset);
215 
216 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_material * asset_system_request_material_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
KAPI kasset_material * asset_system_request_material_sync(struct asset_system_state *state, const char *name)
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_model * asset_system_request_model_from_package(struct asset_system_state *state, const char *package_name, const char *name, void *listener, PFN_kasset_model_loaded_callback callback)
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:101
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 kasset_model * asset_system_request_model_from_package_sync(struct asset_system_state *state, const char *package_name, const char *name)
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:157
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)
void(* PFN_kasset_audio_loaded_callback)(void *listener, kasset_audio *asset)
Definition: asset_system.h:191
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_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:174
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 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)
void(* PFN_kasset_model_loaded_callback)(void *listener, kasset_model *asset)
Definition: asset_system.h:140
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_model * asset_system_request_model_sync(struct asset_system_state *state, const char *name)
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_model * asset_system_request_model(struct asset_system_state *state, const char *name, void *listener, PFN_kasset_model_loaded_callback callback)
KAPI void asset_system_release_model(struct asset_system_state *state, kasset_model *asset)
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 void asset_system_release_bitmap_font(struct asset_system_state *state, kasset_bitmap_font *asset)
KAPI b8 asset_system_write_text(struct asset_system_state *state, kname package_name, kname asset_name, const char *content)
#define KAPI
Import/export qualifier.
Definition: defines.h:209
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:27
_Bool b8
8-bit boolean type
Definition: defines.h:60
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:30
kasset_type
Definition: kasset_types.h:23
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:418
Definition: kasset_types.h:287
Definition: kasset_types.h:398
Definition: kasset_types.h:189
Definition: kasset_types.h:201
Definition: kasset_types.h:215
Definition: kasset_types.h:505
Represents a shader asset, typically loaded from disk.
Definition: kasset_types.h:332
Definition: kasset_types.h:364
Definition: kasset_types.h:281