#ifndef PKE_ASSET_MANAGER_HPP #define PKE_ASSET_MANAGER_HPP #include "pk.h" #include "asset-types.h" #include #include 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 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 */