Kohi Game Engine
kasset_types.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "containers/array.h"
4 #include "core_render_types.h"
5 #include "core_resource_types.h"
6 #include "defines.h"
8 #include "math/math_types.h"
9 #include "parsers/kson_parser.h"
10 #include "strings/kname.h"
11 
13 #define ASSET_MAGIC 0xcafebabe
14 #define ASSET_MAGIC_U64 0xcafebabebadc0ffee
15 
16 // The maximum length of the string representation of an asset type.
17 #define KASSET_TYPE_MAX_LENGTH 64
18 // The maximum name of an asset.
19 #define KASSET_NAME_MAX_LENGTH 256
20 // The maximum name length for a kpackage.
21 #define KPACKAGE_NAME_MAX_LENGTH 128
22 
23 // The maximum length of a fully-qualified asset name, including the '.' between parts.
24 #define KASSET_FULLY_QUALIFIED_NAME_MAX_LENGTH = (KPACKAGE_NAME_MAX_LENGTH + KASSET_TYPE_MAX_LENGTH + KASSET_NAME_MAX_LENGTH + 2)
25 
26 typedef enum kasset_type {
45 
51 typedef struct binary_asset_header {
52  // A magic number used to identify the binary block as a Kohi asset.
54  // Indicates the asset type. Cast to kasset_type.
56  // The asset type version, used for feature support checking for asset versions.
58  // The size of the data region of the asset in bytes.
61 
62 struct kasset;
63 struct kasset_importer;
64 
65 typedef enum asset_request_result {
91 
100 typedef void (*PFN_kasset_on_result)(asset_request_result result, const struct kasset* asset, void* listener_inst);
101 
102 struct vfs_asset_data;
103 
108 typedef void (*PFN_kasset_on_hot_reload)(const struct vfs_asset_data* asset_data, const struct kasset* asset);
109 
122 typedef b8 (*PFN_kasset_importer_import)(const struct kasset_importer* self, u64 data_size, const void* data, void* params, struct kasset* out_asset);
123 
127 typedef struct kasset_importer {
129  const char* source_type;
144 
146 typedef struct kasset_metadata {
147  // The asset version.
153 
156 
159  // TODO: Listing of asset-type-specific metadata
160 
162 
167 typedef struct kasset {
172  // Size of the asset.
174  // Asset name stored as a kname.
176  // Package name stored as a kname.
185 
186 #define KASSET_TYPE_NAME_HEIGHTMAP_TERRAIN "HeightmapTerrain"
187 
188 typedef struct kasset_heightmap_terrain {
197 
198 #define KASSET_TYPE_NAME_IMAGE "Image"
199 
200 typedef struct kasset_image {
211 
212 #define KASSET_TYPE_NAME_STATIC_MESH "StaticMesh"
213 
224 
226 typedef struct kasset_static_mesh {
232 
233 #define KASSET_TYPE_NAME_MATERIAL "Material"
234 
235 typedef struct kasset_material {
238  // Shading model
240 
246 
247  // The asset name for a custom shader. Optional.
249 
252 
255 
259 
263 
267 
272 
273  // Combined metallic/roughness/ao value.
276  // Indicates if the mra combined value/map should be used instead of the separate ones.
278 
282 
283  // DUDV map - only used for water materials.
285 
288 
289  // Only used in water materials.
291  // Only used in water materials.
293  // Only used in water materials.
295 
297 
298 #define KASSET_TYPE_NAME_TEXT "Text"
299 
300 typedef struct kasset_text {
301  const char* content;
303 
304 #define KASSET_TYPE_NAME_BINARY "Binary"
305 
306 typedef struct kasset_binary {
308  const void* content;
310 
311 #define KASSET_TYPE_NAME_KSON "Kson"
312 
313 typedef struct kasset_kson {
315  const char* source_text;
318 
319 #define KASSET_TYPE_NAME_SCENE "Scene"
320 
321 typedef struct kasset_scene {
324  const char* description;
328 
329 #define KASSET_TYPE_NAME_SHADER "Shader"
330 
331 typedef struct kasset_shader_stage {
333  const char* source_asset_name;
334  const char* package_name;
336 
337 typedef struct kasset_shader_attribute {
338  const char* name;
341 
345 typedef struct kasset_shader_uniform {
347  const char* name;
357 
361 typedef struct kasset_shader {
372 
374 
377 
380 
383 
387 
388 #define KASSET_TYPE_NAME_SYSTEM_FONT "SystemFont"
389 
390 typedef struct kasset_system_font_face {
393 
394 typedef struct kasset_system_font {
400  void* font_binary;
402 
403 #define KASSET_TYPE_NAME_BITMAP_FONT "BitmapFont"
404 
405 typedef struct kasset_bitmap_font_glyph {
416 
422 
423 typedef struct kasset_bitmap_font_page {
427 
431 
432 typedef struct kasset_bitmap_font {
439  array_kasset_bitmap_font_glyph glyphs;
440  array_kasset_bitmap_font_kerning kernings;
441  array_kasset_bitmap_font_page pages;
443 
444 #define KASSET_TYPE_NAME_AUDIO "Audio"
445 
449 typedef struct kasset_audio {
451  // The number of channels (i.e. 1 for mono or 2 for stereo)
453  // The sample rate of the sound/music (i.e. 44100)
455 
457 
This files contains an implementation of a static-sized (but dynamically allocated) array.
face_cull_mode
Determines face culling mode during rendering.
Definition: core_render_types.h:11
texture_channel
Definition: core_render_types.h:74
kmaterial_model
Definition: core_render_types.h:324
u32 primitive_topology_types
A combination of topology bit flags.
Definition: core_render_types.h:39
shader_attribute_type
Available attribute types.
Definition: core_render_types.h:102
shader_update_frequency
Defines shader update frequencies, typically used for uniforms.
Definition: core_render_types.h:92
kpixel_format
Represents the format of image (or texture) pixel data.
Definition: core_render_types.h:42
shader_uniform_type
Available uniform types.
Definition: core_render_types.h:117
shader_stage
Shader stages available in the system.
Definition: core_render_types.h:82
kmaterial_type
Definition: core_render_types.h:315
This file contains global type definitions which are used throughout the entire engine and applicatio...
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:25
signed char i8
Signed 8-bit integer.
Definition: defines.h:33
_Bool b8
8-bit boolean type
Definition: defines.h:58
float f32
32-bit floating point number
Definition: defines.h:47
signed int i32
Signed 32-bit integer.
Definition: defines.h:39
unsigned short u16
Unsigned 16-bit integer.
Definition: defines.h:22
signed short i16
Signed 16-bit integer.
Definition: defines.h:36
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:28
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:19
Contains a system for creating numeric identifiers.
struct kasset_static_mesh kasset_static_mesh
Represents a static mesh asset.
struct kasset_system_font kasset_system_font
struct kasset_system_font_face kasset_system_font_face
struct kasset_metadata kasset_metadata
Various metadata included with the asset.
struct kasset_image kasset_image
struct kasset_shader kasset_shader
Represents a shader asset, typically loaded from disk.
struct kasset_kson kasset_kson
struct kasset_shader_attribute kasset_shader_attribute
struct kasset_binary kasset_binary
struct kasset_shader_stage kasset_shader_stage
void(* PFN_kasset_on_hot_reload)(const struct vfs_asset_data *asset_data, const struct kasset *asset)
A function pointer typedef to be used to provide the asset system with a callback function when an as...
Definition: kasset_types.h:108
asset_request_result
Definition: kasset_types.h:65
@ ASSET_REQUEST_RESULT_SUCCESS
Definition: kasset_types.h:67
@ ASSET_REQUEST_RESULT_COUNT
Definition: kasset_types.h:89
@ ASSET_REQUEST_RESULT_GPU_UPLOAD_FAILED
Definition: kasset_types.h:77
@ ASSET_REQUEST_RESULT_AUTO_IMPORT_FAILED
Definition: kasset_types.h:87
@ ASSET_REQUEST_RESULT_INVALID_NAME
Definition: kasset_types.h:73
@ ASSET_REQUEST_RESULT_INTERNAL_FAILURE
Definition: kasset_types.h:79
@ ASSET_REQUEST_RESULT_PARSE_FAILED
Definition: kasset_types.h:75
@ ASSET_REQUEST_RESULT_INVALID_ASSET_TYPE
Definition: kasset_types.h:71
@ ASSET_REQUEST_RESULT_NO_IMPORTER_FOR_SOURCE_ASSET
Definition: kasset_types.h:83
@ ASSET_REQUEST_RESULT_VFS_REQUEST_FAILED
Definition: kasset_types.h:85
@ ASSET_REQUEST_RESULT_INVALID_PACKAGE
Definition: kasset_types.h:69
@ ASSET_REQUEST_RESULT_NO_HANDLER
Definition: kasset_types.h:81
struct kasset_static_mesh_geometry kasset_static_mesh_geometry
ARRAY_TYPE(kasset_bitmap_font_glyph)
struct kasset_shader_uniform kasset_shader_uniform
Represents a shader uniform within a shader asset.
struct kasset_importer kasset_importer
Represents the interface point for an importer.
struct kasset_heightmap_terrain kasset_heightmap_terrain
b8(* PFN_kasset_importer_import)(const struct kasset_importer *self, u64 data_size, const void *data, void *params, struct kasset *out_asset)
Imports an asset according to the provided params and the importer's internal logic....
Definition: kasset_types.h:122
struct binary_asset_header binary_asset_header
The primary header for binary assets, to be used for serialization. This should be the first member o...
void(* PFN_kasset_on_result)(asset_request_result result, const struct kasset *asset, void *listener_inst)
A function pointer typedef to be used to provide the asset asset_system with a calback function when ...
Definition: kasset_types.h:100
struct kasset_bitmap_font_kerning kasset_bitmap_font_kerning
struct kasset_scene kasset_scene
struct kasset kasset
a structure meant to be included as the first member in the struct of all asset types for quick casti...
struct kasset_material kasset_material
struct kasset_bitmap_font_page kasset_bitmap_font_page
struct kasset_text kasset_text
struct kasset_bitmap_font kasset_bitmap_font
kasset_type
Definition: kasset_types.h:26
@ KASSET_TYPE_SKELETAL_MESH
Definition: kasset_types.h:40
@ KASSET_TYPE_MAX
Definition: kasset_types.h:43
@ KASSET_TYPE_SYSTEM_FONT
Definition: kasset_types.h:35
@ KASSET_TYPE_IMAGE
Definition: kasset_types.h:29
@ KASSET_TYPE_STATIC_MESH
Definition: kasset_types.h:31
@ KASSET_TYPE_BINARY
Definition: kasset_types.h:37
@ KASSET_TYPE_SHADER
Definition: kasset_types.h:42
@ KASSET_TYPE_MATERIAL
Definition: kasset_types.h:30
@ KASSET_TYPE_AUDIO
Definition: kasset_types.h:41
@ KASSET_TYPE_KSON
Definition: kasset_types.h:38
@ KASSET_TYPE_BITMAP_FONT
Definition: kasset_types.h:34
@ KASSET_TYPE_VOXEL_TERRAIN
Definition: kasset_types.h:39
@ KASSET_TYPE_TEXT
Definition: kasset_types.h:36
@ KASSET_TYPE_SCENE
Definition: kasset_types.h:33
@ KASSET_TYPE_HEIGHTMAP_TERRAIN
Definition: kasset_types.h:32
@ KASSET_TYPE_UNKNOWN
Definition: kasset_types.h:27
struct kasset_audio kasset_audio
struct kasset_bitmap_font_glyph kasset_bitmap_font_glyph
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
This file contains the parser implementation for the KSON (Kohi Storage Object Notation) file format.
u64 kstring_id
A kstring_id is a string hash made for quick comparisons versus traditional string comparisons.
Definition: kstring_id.h:32
Contains various math types required for the engine.
The primary header for binary assets, to be used for serialization. This should be the first member o...
Definition: kasset_types.h:51
u32 magic
Definition: kasset_types.h:53
u32 version
Definition: kasset_types.h:57
u32 data_block_size
Definition: kasset_types.h:59
u32 type
Definition: kasset_types.h:55
Represents the extents of a 3d object.
Definition: math_types.h:213
Definition: identifier.h:20
Definition: kasset_types.h:449
i32 channels
Definition: kasset_types.h:452
kname name
Definition: kasset_types.h:450
u32 total_sample_count
Definition: kasset_types.h:456
i16 * pcm_data
Definition: kasset_types.h:460
u64 pcm_data_size
Definition: kasset_types.h:458
u32 sample_rate
Definition: kasset_types.h:454
Definition: kasset_types.h:306
const void * content
Definition: kasset_types.h:308
u64 size
Definition: kasset_types.h:307
Definition: kasset_types.h:405
u16 height
Definition: kasset_types.h:410
u16 width
Definition: kasset_types.h:409
i16 x_advance
Definition: kasset_types.h:413
i16 y_offset
Definition: kasset_types.h:412
u16 y
Definition: kasset_types.h:408
u8 page_id
Definition: kasset_types.h:414
u16 x
Definition: kasset_types.h:407
i16 x_offset
Definition: kasset_types.h:411
i32 codepoint
Definition: kasset_types.h:406
Definition: kasset_types.h:417
i32 codepoint_1
Definition: kasset_types.h:419
i32 codepoint_0
Definition: kasset_types.h:418
i16 amount
Definition: kasset_types.h:420
Definition: kasset_types.h:423
i8 id
Definition: kasset_types.h:424
kname image_asset_name
Definition: kasset_types.h:425
Definition: kasset_types.h:432
i32 atlas_size_x
Definition: kasset_types.h:437
array_kasset_bitmap_font_kerning kernings
Definition: kasset_types.h:440
i32 line_height
Definition: kasset_types.h:435
array_kasset_bitmap_font_glyph glyphs
Definition: kasset_types.h:439
i32 baseline
Definition: kasset_types.h:436
array_kasset_bitmap_font_page pages
Definition: kasset_types.h:441
i32 atlas_size_y
Definition: kasset_types.h:438
u32 size
Definition: kasset_types.h:434
kname face
Definition: kasset_types.h:433
Definition: kasset_types.h:188
u32 version
Definition: kasset_types.h:195
kname * material_names
Definition: kasset_types.h:194
u8 material_count
Definition: kasset_types.h:193
vec3 tile_scale
Definition: kasset_types.h:192
kname heightmap_asset_name
Definition: kasset_types.h:189
u16 chunk_size
Definition: kasset_types.h:191
kname heightmap_asset_package_name
Definition: kasset_types.h:190
Definition: kasset_types.h:200
kname name
Definition: kasset_types.h:201
u8 channel_count
Definition: kasset_types.h:205
u8 * pixels
Definition: kasset_types.h:209
u8 mip_levels
Definition: kasset_types.h:206
kpixel_format format
Definition: kasset_types.h:207
u32 width
Definition: kasset_types.h:202
u64 pixel_array_size
Definition: kasset_types.h:208
u32 height
Definition: kasset_types.h:203
u32 depth
Definition: kasset_types.h:204
Represents the interface point for an importer.
Definition: kasset_types.h:127
const char * source_type
The file type supported by the importer.
Definition: kasset_types.h:129
Definition: kasset_types.h:313
kson_tree tree
Definition: kasset_types.h:316
const char * source_text
Definition: kasset_types.h:315
kasset base
Definition: kasset_types.h:314
Definition: kasset_types.h:235
kmaterial_texture_input metallic_map
Definition: kasset_types.h:261
f32 metallic
Definition: kasset_types.h:260
b8 normal_enabled
Definition: kasset_types.h:256
texture_channel metallic_map_source_channel
Definition: kasset_types.h:262
f32 wave_speed
Definition: kasset_types.h:294
kname name
Definition: kasset_types.h:236
kmaterial_model model
Definition: kasset_types.h:239
kmaterial_texture_input roughness_map
Definition: kasset_types.h:265
vec3 mra
Definition: kasset_types.h:274
u32 custom_sampler_count
Definition: kasset_types.h:286
vec4 base_colour
Definition: kasset_types.h:250
kname custom_shader_name
Definition: kasset_types.h:248
b8 double_sided
Definition: kasset_types.h:242
kmaterial_texture_input dudv_map
Definition: kasset_types.h:284
kmaterial_texture_input base_colour_map
Definition: kasset_types.h:251
kmaterial_texture_input ambient_occlusion_map
Definition: kasset_types.h:270
vec3 normal
Definition: kasset_types.h:257
b8 use_mra
Definition: kasset_types.h:277
kmaterial_texture_input specular_colour_map
Definition: kasset_types.h:254
kmaterial_texture_input mra_map
Definition: kasset_types.h:275
b8 emissive_enabled
Definition: kasset_types.h:279
b8 has_transparency
Definition: kasset_types.h:241
b8 use_vertex_colour_as_base_colour
Definition: kasset_types.h:245
kmaterial_texture_input normal_map
Definition: kasset_types.h:258
b8 recieves_shadow
Definition: kasset_types.h:243
kmaterial_texture_input emissive_map
Definition: kasset_types.h:281
kmaterial_type type
Definition: kasset_types.h:237
kmaterial_sampler_config * custom_samplers
Definition: kasset_types.h:287
texture_channel ambient_occlusion_map_source_channel
Definition: kasset_types.h:271
f32 roughness
Definition: kasset_types.h:264
f32 tiling
Definition: kasset_types.h:290
b8 casts_shadow
Definition: kasset_types.h:244
vec4 emissive
Definition: kasset_types.h:280
texture_channel roughness_map_source_channel
Definition: kasset_types.h:266
f32 ambient_occlusion
Definition: kasset_types.h:269
b8 ambient_occlusion_enabled
Definition: kasset_types.h:268
vec4 specular_colour
Definition: kasset_types.h:253
f32 wave_strength
Definition: kasset_types.h:292
Various metadata included with the asset.
Definition: kasset_types.h:146
u32 version
Definition: kasset_types.h:148
kname * tags
An array of tags.
Definition: kasset_types.h:158
kstring_id source_asset_path
The path of the originally imported file used to create this asset, stored as a kstring_id.
Definition: kasset_types.h:152
u32 tag_count
The number of tags.
Definition: kasset_types.h:155
kstring_id asset_path
The path of the asset, stored as a kstring_id.
Definition: kasset_types.h:150
Definition: kasset_types.h:321
scene_node_config * nodes
Definition: kasset_types.h:326
u32 version
Definition: kasset_types.h:323
kname name
Definition: kasset_types.h:322
u32 node_count
Definition: kasset_types.h:325
const char * description
Definition: kasset_types.h:324
Definition: kasset_types.h:337
const char * name
Definition: kasset_types.h:338
shader_attribute_type type
Definition: kasset_types.h:339
Definition: kasset_types.h:331
shader_stage type
Definition: kasset_types.h:332
const char * package_name
Definition: kasset_types.h:334
const char * source_asset_name
Definition: kasset_types.h:333
Represents a shader uniform within a shader asset.
Definition: kasset_types.h:345
shader_update_frequency frequency
The uniform update frequency (i.e. per-frame, per-group, per-draw)
Definition: kasset_types.h:355
const char * name
The uniform name.
Definition: kasset_types.h:347
shader_uniform_type type
The uniform type.
Definition: kasset_types.h:349
u32 array_size
The number of elements for array uniforms. Treated as an array if > 1.
Definition: kasset_types.h:353
u32 size
The uniform size. Only used for struct type uniforms, ignored otherwise.
Definition: kasset_types.h:351
Represents a shader asset, typically loaded from disk.
Definition: kasset_types.h:361
b8 supports_wireframe
Definition: kasset_types.h:370
b8 stencil_write
Definition: kasset_types.h:367
u32 version
Definition: kasset_types.h:363
kname name
Definition: kasset_types.h:362
b8 colour_write
Definition: kasset_types.h:369
u32 attribute_count
Definition: kasset_types.h:381
b8 depth_write
Definition: kasset_types.h:365
kasset_shader_uniform * uniforms
Definition: kasset_types.h:385
b8 stencil_test
Definition: kasset_types.h:366
u32 uniform_count
Definition: kasset_types.h:384
kasset_shader_stage * stages
Definition: kasset_types.h:379
u16 max_draw_ids
Definition: kasset_types.h:376
b8 depth_test
Definition: kasset_types.h:364
kasset_shader_attribute * attributes
Definition: kasset_types.h:382
primitive_topology_types topology_types
Definition: kasset_types.h:371
face_cull_mode cull_mode
Definition: kasset_types.h:373
u32 stage_count
Definition: kasset_types.h:378
b8 colour_read
Definition: kasset_types.h:368
u16 max_groups
Definition: kasset_types.h:375
Definition: kasset_types.h:214
vec3 center
Definition: kasset_types.h:222
kname name
Definition: kasset_types.h:215
u32 * indices
Definition: kasset_types.h:220
u32 index_count
Definition: kasset_types.h:219
u32 vertex_count
Definition: kasset_types.h:217
kname material_asset_name
Definition: kasset_types.h:216
vertex_3d * vertices
Definition: kasset_types.h:218
extents_3d extents
Definition: kasset_types.h:221
Represents a static mesh asset.
Definition: kasset_types.h:226
kasset_static_mesh_geometry * geometries
Definition: kasset_types.h:228
u16 geometry_count
Definition: kasset_types.h:227
vec3 center
Definition: kasset_types.h:230
extents_3d extents
Definition: kasset_types.h:229
Definition: kasset_types.h:390
kname name
Definition: kasset_types.h:391
Definition: kasset_types.h:394
kname ttf_asset_name
Definition: kasset_types.h:395
u32 face_count
Definition: kasset_types.h:397
u32 font_binary_size
Definition: kasset_types.h:399
kasset_system_font_face * faces
Definition: kasset_types.h:398
kname ttf_asset_package_name
Definition: kasset_types.h:396
void * font_binary
Definition: kasset_types.h:400
Definition: kasset_types.h:300
const char * content
Definition: kasset_types.h:301
a structure meant to be included as the first member in the struct of all asset types for quick casti...
Definition: kasset_types.h:167
kname name
Definition: kasset_types.h:175
kasset_metadata meta
Metadata for the asset.
Definition: kasset_types.h:181
u32 file_watch_id
The file watch id, if the asset is being watched. Otherwise INVALID_ID.
Definition: kasset_types.h:183
identifier id
A system-wide unique identifier for the asset.
Definition: kasset_types.h:169
u32 generation
Increments every time the asset is loaded/reloaded. Otherwise INVALID_ID.
Definition: kasset_types.h:171
kasset_type type
The asset type.
Definition: kasset_types.h:179
kname package_name
Definition: kasset_types.h:177
u64 size
Definition: kasset_types.h:173
Definition: core_render_types.h:380
Definition: core_render_types.h:368
Definition: kson_parser.h:121
Represents the configuration for a scene node.
Definition: core_resource_types.h:142
Represents a single vertex in 3D space.
Definition: math_types.h:223
Represents data and properties from an asset loaded from the VFS.
Definition: vfs.h:54
A 3-element vector.
Definition: math_types.h:49
A 4-element vector.
Definition: math_types.h:89