105 lines
2.1 KiB
C
105 lines
2.1 KiB
C
#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 <stdio.h>
|
|
|
|
// ::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);
|