64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <stdbool.h>
 | |
| #include <stdint.h>
 | |
| 
 | |
| #include <kinc/image.h>
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| #define KHA_MAX_PATH_LENGTH 256 - 1
 | |
| 
 | |
| typedef int64_t kha_index_t;
 | |
| 
 | |
| typedef enum { KHA_FILE_TYPE_BLOB, KHA_FILE_TYPE_IMAGE, KHA_FILE_TYPE_SOUND } kha_file_type_t;
 | |
| 
 | |
| typedef struct {
 | |
| 	uint8_t *bytes;
 | |
| 	size_t size;
 | |
| } kha_blob_t;
 | |
| 
 | |
| typedef struct {
 | |
| 	bool readable;
 | |
| 	kinc_image_t image;
 | |
| } kha_image_t;
 | |
| 
 | |
| typedef struct {
 | |
| 	float *samples;
 | |
| 	uint8_t *compressed_samples;
 | |
| 	size_t size;
 | |
| 	size_t channels;
 | |
| 	int sample_rate;
 | |
| 	float length;
 | |
| } kha_sound_t;
 | |
| 
 | |
| typedef union {
 | |
| 	kha_blob_t blob;
 | |
| 	kha_image_t image;
 | |
| 	kha_sound_t sound;
 | |
| } kha_file_data_t;
 | |
| 
 | |
| typedef struct {
 | |
| 	char name[KHA_MAX_PATH_LENGTH + 1];
 | |
| 	kha_file_type_t type;
 | |
| 	kha_file_data_t data;
 | |
| 	kha_index_t index;
 | |
| 	bool error;
 | |
| } kha_file_reference_t;
 | |
| 
 | |
| void kha_loader_init(void);
 | |
| kha_index_t kha_loader_load_blob(const char *filename);
 | |
| kha_index_t kha_loader_load_image(const char *filename, bool readable);
 | |
| kha_index_t kha_loader_load_sound(const char *filename);
 | |
| kha_file_reference_t kha_loader_get_file(void);
 | |
| 
 | |
| // cleanup temporary memory allocations
 | |
| void kha_loader_cleanup_blob(kha_blob_t blob);
 | |
| void kha_loader_cleanup_sound(kha_sound_t sound);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 |