#pragma once // ::Packer::Includes::Header:: #if __linux__ # define _GNU_SOURCE #elif _WIN32 #endif #define STG_NO_RENDERER #define STB_SPRINTF_IMPLEMENTATION #include "stb/stb_sprintf.h" #include "xxhash/xxhash.h" #include "fastlz/fastlz.h" #include "assets.h" #include "shared_types.h" #include "ds.h" #include "platform/platform.h" #include "util.h" #include "allocators.h" #include "renderer.h" #include "game.h" #include // ::Packer::Macros::Header:: #define CreateMagicValue(a, b, c, d) ((u32)(d << 24) | (u32)(c << 16) | (u32)(b << 8) | (u32)(a)) #define FWrite(buf, size, count, file) ((size) * (fwrite(buf, size, count, file))) #define FRead(buf, size, count, file) ((size) * (fread(buf, size, count, file))) // ::Packer::Defines::Header:: #define FILE_VERSION 0 // ::Packer::Types::Header:: typedef struct AssetTag { u32 tag_id; f32 value; } AssetTag; typedef struct AssetFile { u64 data_offset; u64 len; } AssetFile; typedef struct AssetHeader { AssetTag *tags; AssetFile *assets; u32 tag_count; u32 asset_count; } AssetHeader; 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; typedef struct FileMapping { c8 *file_name; u32 ix; } FileMapping; // ::Packer::Files::Functions::Header:: FILE *OpenFile(c8 *name, c8 *mode); void CloseFile(FILE *file); u64 FileLength(FILE *file); u64 WriteData(void *buf, u64 pos, u64 size, FILE *file); u64 ReadData(void *buf, u64 pos, u64 size, FILE *file); // ::Packer::Packing::Functions::Header:: void SetArrayLookups(); void InitHeader(FileHeader *header); i32 WriteHeader(FILE *file, FileHeader *header); void PackFiles(Arena *arena, FileHeader *header); void MoveToTextureDir(c8 **return_dir); void MoveToShaderDir(c8 **return_dir); // ::Packer::Tests::Functions::Header:: void TestAssetPack(Arena *arena); static inline void TestAssetIsCorrect(Arena *arena, c8 *file_name, AssetFile *file_info, FILE *file); // ::Packer::Main::Functions::Header:: int main(int argc, char **argv);