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
 |