Gears-C/src/assets.h

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);