129 lines
2.2 KiB
C
129 lines
2.2 KiB
C
#pragma once
|
|
|
|
// ::Assets::Macros::Header::
|
|
|
|
#define FILE_VERSION 1
|
|
|
|
#define CreateMagicValue(a, b, c, d) ((u32)(d << 24) | (u32)(c << 16) | (u32)(b << 8) | (u32)(a))
|
|
|
|
// ::Assets::Types::Header::
|
|
|
|
typedef enum AssetType_e : u32
|
|
{
|
|
SHADER_ASSET,
|
|
TEXTURE_ASSET,
|
|
SOUND_ASSET,
|
|
MODEL_ASSET,
|
|
ASSET_TYPE_MAX,
|
|
} AssetType;
|
|
|
|
typedef enum ShaderAsset_e : u32
|
|
{
|
|
QUAD_FRAG_SPIRV_SHADER,
|
|
QUAD_VERT_SPIRV_SHADER,
|
|
GUI_FRAG_SPIRV_SHADER,
|
|
GUI_VERT_SPIRV_SHADER,
|
|
|
|
SHADER_ASSET_MAX,
|
|
} ShaderAsset;
|
|
|
|
typedef enum TextureAsset_e : u32
|
|
{
|
|
PATTERMON_OBESE,
|
|
PATTERMON_PURPLOID,
|
|
PATTERMON_ORIENTAL,
|
|
|
|
TEXTURE_ASSET_MAX
|
|
} TextureAsset;
|
|
|
|
typedef enum TextureAssetTag_e : u32
|
|
{
|
|
TEXTURE_ASSET_TAG_MAX,
|
|
} TextureAssetTag;
|
|
|
|
typedef enum SoundAsset_e : u32
|
|
{
|
|
SOUND_ASSET_MAX,
|
|
} SoundAsset;
|
|
|
|
typedef enum SoundAssetTag_e : u32
|
|
{
|
|
SOUND_ASSET_TAG_MAX,
|
|
} SoundAssetTag;
|
|
|
|
typedef enum ModelAsset_e : u32
|
|
{
|
|
MODEL_ASSET_MAX,
|
|
} ModelAsset;
|
|
|
|
typedef enum ModelAssetTag_e : u32
|
|
{
|
|
MODEL_ASSET_TAG_MAX,
|
|
} ModelAssetTag;
|
|
|
|
typedef struct TextureAssetMeta
|
|
{
|
|
u32 w;
|
|
u32 h;
|
|
u32 ch;
|
|
} TextureAssetMeta;
|
|
|
|
typedef struct ModelAssetMeta
|
|
{
|
|
u32 vert_count;
|
|
u32 idx_count;
|
|
} ModelAssetMeta;
|
|
|
|
typedef struct Asset
|
|
{
|
|
u8 *bytes;
|
|
u64 len;
|
|
} Asset;
|
|
|
|
typedef struct AssetTag
|
|
{
|
|
u32 tag_id;
|
|
f32 value;
|
|
} AssetTag;
|
|
|
|
typedef struct AssetFile
|
|
{
|
|
u64 data_offset;
|
|
u64 len;
|
|
union
|
|
{
|
|
TextureAssetMeta texture_meta;
|
|
ModelAssetMeta model_meta;
|
|
};
|
|
} AssetFile;
|
|
|
|
typedef struct FileHeader
|
|
{
|
|
u32 magic_num;
|
|
u32 version;
|
|
|
|
u32 tag_counts[ASSET_TYPE_MAX];
|
|
u32 asset_counts[ASSET_TYPE_MAX];
|
|
|
|
u64 tag_offsets[ASSET_TYPE_MAX];
|
|
u64 asset_offsets[ASSET_TYPE_MAX];
|
|
} FileHeader;
|
|
|
|
// ::Assets::Init::Functions::Header::
|
|
|
|
static void apInit();
|
|
|
|
// ::Assets::Loading::Functions::Header::
|
|
|
|
static Asset apLoadTexture(TextureAsset asset_id);
|
|
static Asset apLoadShader(ShaderAsset asset_id);
|
|
static TextureAssetMeta apGetTextureMeta(TextureAsset asset_id);
|
|
static void apUnloadTexture(TextureAsset asset_id);
|
|
static void apUnloadShader(ShaderAsset asset_id);
|
|
|
|
// ::Assets::Util::Functions::Header::
|
|
|
|
// TODO(MA): Implement async asset handling
|
|
static inline b32 apMarkUnloaded(AssetType type, u32 index);
|
|
static inline void apMarkLoaded(AssetType type, u32 index);
|