Kohi Game Engine
vfs.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include "defines.h"
14 #include "strings/kname.h"
15 
16 struct kpackage;
17 struct kasset;
18 struct kasset_metadata;
19 struct vfs_state;
20 
21 typedef struct vfs_config {
22  const char** text_user_types;
23  const char* manifest_file_path;
25 
26 typedef enum vfs_asset_flag_bits {
30 
32 
33 typedef enum vfs_request_result {
49 
53 typedef struct vfs_asset_data {
59  const char* path;
60 
63  union {
65  const char* text;
67  const void* bytes;
68  };
71 
74 
77 
79  void* context;
81 
82 typedef void (*PFN_on_asset_loaded_callback)(struct vfs_state* vfs, vfs_asset_data asset_data);
83 
84 typedef struct vfs_state {
85  // darray
86  struct kpackage* packages;
88 
92 typedef struct vfs_request_info {
102  const void* context;
103 
106 
116 KAPI b8 vfs_initialize(u64* memory_requirement, vfs_state* out_state, const vfs_config* config);
117 
124 
133 
143 
152 KAPI const char* vfs_path_for_asset(vfs_state* state, kname package_name, kname asset_name);
153 
162 KAPI const char* vfs_source_path_for_asset(vfs_state* state, kname package_name, kname asset_name);
163 
174 KAPI void vfs_request_direct_from_disk(vfs_state* state, const char* path, b8 is_binary, u32 context_size, const void* context, PFN_on_asset_loaded_callback callback);
175 
187 KAPI void vfs_request_direct_from_disk_sync(vfs_state* state, const char* path, b8 is_binary, u32 context_size, const void* context, vfs_asset_data* out_data);
188 
199 KAPI b8 vfs_asset_write_binary(vfs_state* state, kname asset_name, kname package_name, u64 size, const void* data);
200 
211 KAPI b8 vfs_asset_write_text(vfs_state* state, kname asset_name, kname package_name, const char* text);
212 
219 
220 #if KOHI_HOT_RELOAD
230 KAPI u32 vfs_asset_watch(vfs_state* state, kname asset_name, kname package_name, b8 is_binary);
231 
239 KAPI b8 vfs_asset_unwatch(vfs_state* state, u32 watch_id);
240 #endif
This file contains global type definitions which are used throughout the entire engine and applicatio...
#define KAPI
Import/export qualifier.
Definition: defines.h:209
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:27
_Bool b8
8-bit boolean type
Definition: defines.h:60
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:30
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
Various metadata included with the asset.
Definition: kasset_types.h:147
a structure meant to be included as the first member in the struct of all asset types for quick casti...
Definition: kasset_types.h:168
Definition: kpackage.h:37
Represents data and properties from an asset loaded from the VFS.
Definition: vfs.h:53
const char * text
Definition: vfs.h:65
kname asset_name
The name of the asset stored as a kname.
Definition: vfs.h:55
const char * path
A copy of the asset path.
Definition: vfs.h:59
kname package_name
The name of the package containing the asset, stored as a kname.
Definition: vfs.h:57
const void * bytes
Definition: vfs.h:67
vfs_request_result result
Definition: vfs.h:73
vfs_asset_flags flags
Various flags for the given asset.
Definition: vfs.h:70
u64 size
The size of the asset in bytes.
Definition: vfs.h:62
void * context
Definition: vfs.h:79
u32 context_size
Definition: vfs.h:76
Definition: vfs.h:21
const char ** text_user_types
Definition: vfs.h:22
const char * manifest_file_path
Definition: vfs.h:23
The request options for getting an asset from the VFS.
Definition: vfs.h:92
kname asset_name
The name of the asset to request.
Definition: vfs.h:96
PFN_on_asset_loaded_callback vfs_callback
Definition: vfs.h:104
const void * context
Definition: vfs.h:102
kname package_name
The name of the package to load the asset from.
Definition: vfs.h:94
b8 is_binary
Indicates if the asset is binary. If not, the asset is loaded as text.
Definition: vfs.h:98
u32 context_size
The size of the context in bytes.
Definition: vfs.h:100
Definition: vfs.h:84
struct kpackage * packages
Definition: vfs.h:86
KAPI b8 vfs_asset_write_binary(vfs_state *state, kname asset_name, kname package_name, u64 size, const void *data)
Attempts to write the provided binary data to the VFS (or package).
KAPI void vfs_asset_data_cleanup(vfs_asset_data *data)
Releases resources held by data. NOTE: This does NOT account for any dynamic allocations made within ...
KAPI void vfs_request_direct_from_disk_sync(vfs_state *state, const char *path, b8 is_binary, u32 context_size, const void *context, vfs_asset_data *out_data)
Requests an asset directly a disk path via the VFS synchronously. NOTE: This should be used sparingly...
KAPI const char * vfs_path_for_asset(vfs_state *state, kname package_name, kname asset_name)
Attempts to retrieve the path for the given asset, if it exists.
KAPI b8 vfs_initialize(u64 *memory_requirement, vfs_state *out_state, const vfs_config *config)
Initializes the Virtual File System (VFS). Call twice; once to get memory requirement (passing out_st...
KAPI vfs_asset_data vfs_request_asset_sync(vfs_state *state, vfs_request_info info)
Requests an asset from the VFS synchronously. NOTE: This should be used sparingly as it performs devi...
KAPI b8 vfs_asset_write_text(vfs_state *state, kname asset_name, kname package_name, const char *text)
Attempts to write the provided text data to the VFS (or package).
vfs_request_result
Definition: vfs.h:33
@ VFS_REQUEST_RESULT_NOT_IN_PACKAGE
Definition: vfs.h:39
@ VFS_REQUEST_RESULT_WRITE_ERROR
Definition: vfs.h:45
@ VFS_REQUEST_RESULT_FILE_DOES_NOT_EXIST
Definition: vfs.h:37
@ VFS_REQUEST_RESULT_SUCCESS
Definition: vfs.h:35
@ VFS_REQUEST_RESULT_READ_ERROR
Definition: vfs.h:43
@ VFS_REQUEST_RESULT_INTERNAL_FAILURE
Definition: vfs.h:47
@ VFS_REQUEST_RESULT_PACKAGE_DOES_NOT_EXIST
Definition: vfs.h:41
KAPI void vfs_request_asset(vfs_state *state, vfs_request_info info)
Requests an asset from the VFS, issuing the callback when complete. This call is asynchronous.
struct vfs_config vfs_config
struct vfs_request_info vfs_request_info
The request options for getting an asset from the VFS.
void(* PFN_on_asset_loaded_callback)(struct vfs_state *vfs, vfs_asset_data asset_data)
Definition: vfs.h:82
KAPI const char * vfs_source_path_for_asset(vfs_state *state, kname package_name, kname asset_name)
Attempts to retrieve the source path for the given asset, if one exists.
struct vfs_state vfs_state
KAPI void vfs_request_direct_from_disk(vfs_state *state, const char *path, b8 is_binary, u32 context_size, const void *context, PFN_on_asset_loaded_callback callback)
Requests an asset directly a disk path via the VFS, issuing the callback when complete....
u32 vfs_asset_flags
Definition: vfs.h:31
KAPI void vfs_shutdown(vfs_state *state)
Shuts down the VFS.
struct vfs_asset_data vfs_asset_data
Represents data and properties from an asset loaded from the VFS.
vfs_asset_flag_bits
Definition: vfs.h:26
@ VFS_ASSET_FLAG_NONE
Definition: vfs.h:27
@ VFS_ASSET_FLAG_BINARY_BIT
Definition: vfs.h:28