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
 |