1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#ifndef PKE_ASSET_MANAGER_HPP
#define PKE_ASSET_MANAGER_HPP
#include "pk.h"
#include "asset-types.h"
#include <cstdint>
#include <future>
struct AssetHandle : public pk_bkt_arr_handle { };
constexpr AssetHandle AssetHandle_MAX = AssetHandle{ pk_bkt_arr_handle_MAX_constexpr };
TypeSafeInt_constexpr(AssetLoadingState, uint8_t, 0xFF);
TypeSafeInt_constexpr(AssetType, uint8_t, 0xFF);
TypeSafeInt_constexpr(AssetFlags, uint8_t, 0xFF);
const AssetLoadingState PKE_ASSET_LOADING_STATE_UNLOADED = AssetLoadingState {0};
const AssetLoadingState PKE_ASSET_LOADING_STATE_LOADING = AssetLoadingState {1};
const AssetLoadingState PKE_ASSET_LOADING_STATE_LOADED = AssetLoadingState {2};
const AssetLoadingState PKE_ASSET_LOADING_STATE_FAILED = AssetLoadingState {3};
const AssetType PKE_ASSET_TYPE_UNSET = AssetType {0x00};
const AssetType PKE_ASSET_TYPE_SHADER = AssetType {0x01};
const AssetType PKE_ASSET_TYPE_MODEL = AssetType {0x02};
const AssetType PKE_ASSET_TYPE_TEXTURE = AssetType {0x04};
const AssetType PKE_ASSET_TYPE_AUDIO = AssetType {0x08};
const AssetType PKE_ASSET_TYPE_FONT = AssetType {0x10};
const AssetType PKE_ASSET_TYPE_ALL = AssetType {0xFF};
const AssetFlags PKE_ASSET_FLAGS_NONE = AssetFlags {0x00};
const AssetFlags PKE_ASSET_FLAGS_MEM_STATIC = AssetFlags {0x01};
union pke_asset_details {
struct pke_asset_details_shader {
} shader;
struct pke_asset_details_model {
} model;
struct pke_asset_details_texture {
uint32_t width;
uint32_t height;
} texture;
struct pke_asset_details_audio {
} audio;
struct pke_asset_details_font {
} font;
};
struct Asset {
AssetHandle handle{};
AssetKey key = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'};
const char *basePath = nullptr;
int64_t size = 0;
const void *ptr = nullptr;
std::future<void> future;
int8_t referenceCount = 0;
AssetLoadingState state = PKE_ASSET_LOADING_STATE_UNLOADED;
AssetType type = PKE_ASSET_TYPE_UNSET;
AssetFlags flags = PKE_ASSET_FLAGS_NONE;
union pke_asset_details details;
};
void AM_Init();
AssetHandle AM_Register(const AssetKey &key, AssetType type, const void *data, int64_t size, std::size_t alignment, union pke_asset_details *details = nullptr);
AssetHandle AM_Register(const char *path, AssetType type, union pke_asset_details *details = nullptr);
AssetHandle AM_Register(const AssetKey &key, AssetType type, const char *path, union pke_asset_details *details = nullptr);
AssetHandle AM_Register_Static(const AssetKey &key, AssetType type, const void *data, int64_t size, union pke_asset_details *details = nullptr);
void AM_Release(AssetHandle assetHandle);
const Asset *AM_Get(AssetHandle assetHandle);
const AssetHandle AM_GetHandle(const AssetKey &key);
pk_bkt_arr *AM_GetAssets();
void AM_Teardown();
void AM_DebugPrint();
#endif /* PKE_ASSET_MANAGER_HPP */
|