Kohi Game Engine
texture_system.h
Go to the documentation of this file.
1 
15 #pragma once
16 
17 #include <assets/kasset_types.h>
18 #include <core_render_types.h>
19 
21 
22 struct texture_system_state;
23 
25 typedef struct texture_system_config {
29 
31 #define DEFAULT_TEXTURE_NAME "Texture.Default"
32 
34 #define DEFAULT_BASE_COLOUR_TEXTURE_NAME "Texture.DefaultBase"
35 
37 #define DEFAULT_SPECULAR_TEXTURE_NAME "Texture.DefaultSpecular"
38 
40 #define DEFAULT_NORMAL_TEXTURE_NAME "Texture.DefaultNormal"
41 
43 #define DEFAULT_MRA_TEXTURE_NAME "Texture.DefaultMRA"
44 
46 #define DEFAULT_CUBE_TEXTURE_NAME "Texture.DefaultCube"
47 
49 #define DEFAULT_WATER_NORMAL_TEXTURE_NAME "Texture.DefaultWaterNormal"
50 
52 #define DEFAULT_WATER_DUDV_TEXTURE_NAME "Texture.DefaultWaterDUDV"
53 
64 b8 texture_system_initialize(u64* memory_requirement, void* state, void* config);
65 
71 void texture_system_shutdown(void* state);
72 
73 typedef void (*PFN_texture_loaded_callback)(ktexture texture, void* listener);
74 
92 KAPI ktexture texture_acquire(kname image_asset_name, void* listener, PFN_texture_loaded_callback callback);
93 
110 
117 
136 KAPI ktexture texture_acquire_from_package(kname image_asset_name, kname package_name, void* listener, PFN_texture_loaded_callback callback);
137 
155 
179 KAPI ktexture texture_cubemap_acquire(kname image_asset_name_prefix, void* listener, PFN_texture_loaded_callback callback);
180 
203 
228 KAPI ktexture texture_cubemap_acquire_from_package(kname image_asset_name_prefix, kname package_name, void* listener, PFN_texture_loaded_callback callback);
229 
252 KAPI ktexture texture_cubemap_acquire_from_package_sync(kname image_asset_name_prefix, kname package_name);
253 
254 // Easier idea? synchronous. auto_release=true, default options
256 
257 KAPI ktexture texture_acquire_from_pixel_data(kpixel_format format, u32 pixel_array_size, void* pixels, u32 width, u32 height, kname name);
258 
259 KAPI ktexture texture_cubemap_acquire_from_pixel_data(kpixel_format format, u32 pixel_array_size, void* pixels, u32 width, u32 height, kname name);
260 
261 /* KAPI ktexture texture_cubemap_acquire_from_images(const struct kasset_image* images[6]); */
262 
263 typedef struct ktexture_load_options {
268  // Unload from GPU when reference count reaches 0.
274  // Set to 0 to calculate mip levels based on size.
276  union {
279  };
281  // The name of the image asset to load for the texture. Optional. Only used for single-layer textures and cubemaps. Ignored for layered textures.
283  // The name of the image asset to load for the texture. Optional. Only used for single-layer textures and cubemaps. Ignored for layered textures.
285  // Names of layer image assets, only used for array/layered textures. Element count must be layer_count.
287  // Names of packages containing layer image assets, only used for array/layered textures. Element count must be layer_count. Use null/0 to load from application package.
289 
290  // Block of pixel data, which can be multiple layers as defined by layer_count. The pixel data for all layers should be contiguous. Layout interpreted based on format.
291  void* pixel_data;
292  // The size of the pixel_data array in bytes (NOT pixel count!)
295 
298 
309 KAPI b8 texture_resize(ktexture t, u32 width, u32 height, b8 regenerate_internal_data);
310 
321 KAPI b8 texture_write_data(ktexture t, u32 offset, u32 size, void* data);
322 
325 KAPI b8 texture_dimensions_get(ktexture t, u32* out_width, u32* out_height);
326 
328 
330 
kpixel_format
Represents the format of image (or texture) pixel data.
Definition: core_render_types.h:42
#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 short u16
Unsigned 16-bit integer.
Definition: defines.h:22
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:28
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:19
u64 kname
A kname is a string hash made for quick comparisons versus traditional string comparisons.
Definition: kname.h:36
u16 ktexture
Represents a texture to be used for rendering purposes, stored on the GPU (VRAM)
Definition: kresource_types.h:45
u8 ktexture_flag_bits
Holds bit flags for textures..
Definition: kresource_types.h:39
ktexture_type
Represents various types of textures.
Definition: kresource_types.h:10
Definition: kasset_types.h:200
A handle is a unique identifier used a system in the engine to avoid using raw pointers where possibl...
Definition: khandle.h:25
Definition: texture_system.h:263
kname name
Definition: texture_system.h:280
kname * layer_package_names
Definition: texture_system.h:288
u32 layer_count
Definition: texture_system.h:278
u8 mip_levels
Definition: texture_system.h:275
kpixel_format format
Definition: texture_system.h:270
b8 multiframe_buffering
Definition: texture_system.h:267
kname package_name
Definition: texture_system.h:284
void * pixel_data
Definition: texture_system.h:291
u32 width
Definition: texture_system.h:272
b8 is_depth
Definition: texture_system.h:265
u32 pixel_array_size
Definition: texture_system.h:293
kname * layer_image_asset_names
Definition: texture_system.h:286
ktexture_type type
Definition: texture_system.h:271
b8 is_stencil
Definition: texture_system.h:266
u32 height
Definition: texture_system.h:273
kname image_asset_name
Definition: texture_system.h:282
u32 depth
Definition: texture_system.h:277
b8 is_writeable
Definition: texture_system.h:264
b8 auto_release
Definition: texture_system.h:269
The texture system configuration.
Definition: texture_system.h:25
u16 max_texture_count
The maximum number of textures that can be loaded at once.
Definition: texture_system.h:27
KAPI b8 texture_resize(ktexture t, u32 width, u32 height, b8 regenerate_internal_data)
Resizes the given texture. May only be done on writeable textures. Potentially regenerates internal d...
KAPI ktexture texture_acquire_from_package(kname image_asset_name, kname package_name, void *listener, PFN_texture_loaded_callback callback)
Attempts to acquire a texture using the given image asset name, loaded from the provided package....
KAPI void texture_release(ktexture texture)
Releases resources for the given texture.
KAPI ktexture texture_acquire_with_options_sync(ktexture_load_options options)
b8 texture_system_initialize(u64 *memory_requirement, void *state, void *config)
Initializes the texture system. Should be called twice; once to get the memory requirement (passing s...
KAPI u32 texture_height_get(ktexture t)
KAPI ktexture texture_cubemap_acquire_from_package(kname image_asset_name_prefix, kname package_name, void *listener, PFN_texture_loaded_callback callback)
Attempts to acquire a cubemap texture with the given image asset name from the provided package....
KAPI ktexture texture_cubemap_acquire_from_pixel_data(kpixel_format format, u32 pixel_array_size, void *pixels, u32 width, u32 height, kname name)
void texture_system_shutdown(void *state)
Shuts down the texture system.
KAPI khandle texture_renderer_handle_get(ktexture t)
KAPI b8 texture_dimensions_get(ktexture t, u32 *out_width, u32 *out_height)
KAPI b8 texture_is_loaded(ktexture t)
KAPI ktexture texture_acquire_with_options(ktexture_load_options options, void *listener, PFN_texture_loaded_callback callback)
KAPI ktexture texture_acquire(kname image_asset_name, void *listener, PFN_texture_loaded_callback callback)
Attempts to acquire a texture using the given image asset name. Asynchronous.
KAPI ktexture texture_cubemap_acquire_from_package_sync(kname image_asset_name_prefix, kname package_name)
Attempts to acquire a cubemap texture with the given image asset name from the provided package....
struct texture_system_config texture_system_config
The texture system configuration.
KAPI ktexture texture_acquire_from_pixel_data(kpixel_format format, u32 pixel_array_size, void *pixels, u32 width, u32 height, kname name)
KAPI ktexture_flag_bits texture_flags_get(ktexture t)
KAPI b8 texture_write_data(ktexture t, u32 offset, u32 size, void *data)
Writes the given data to the provided texture. May only be used on writeable textures.
void(* PFN_texture_loaded_callback)(ktexture texture, void *listener)
Definition: texture_system.h:73
KAPI ktexture texture_acquire_from_image(const kasset_image *image, kname name)
KAPI ktexture texture_acquire_from_package_sync(kname image_asset_name, kname package_name)
Attempts to acquire a texture using the given image asset name, loaded from the provided package....
KAPI ktexture texture_acquire_sync(kname image_asset_name)
Attempts to acquire a texture using the given image asset name. Synchronous.
struct ktexture_load_options ktexture_load_options
KAPI u32 texture_width_get(ktexture t)
KAPI ktexture texture_cubemap_acquire(kname image_asset_name_prefix, void *listener, PFN_texture_loaded_callback callback)
Attempts to acquire a cubemap texture with the given image asset name. Asynchronous.
KAPI ktexture texture_cubemap_acquire_sync(kname image_asset_name_prefix)
Attempts to acquire a cubemap texture with the given image asset name. Synchronous.