2024-08-12 15:11:25 +00:00
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// asset pipeline framework
|
|
|
|
// - rlyeh, public domain.
|
|
|
|
//
|
|
|
|
// all cooked assets are stored inside zip file at root folder, which acts as an asset database.
|
|
|
|
// during game boot, the database gets rebuilt as follows: (note: step 0 is an optional optimization)
|
|
|
|
// 0. for N given cores, split list of infiles into N zipfiles. then, parallelize cooks.
|
|
|
|
// 1. compare local disk files against file in zip database. for each mismatch do:
|
|
|
|
// 2. - invalidate its entry in database, if local file was removed from disk.
|
|
|
|
// 3. - write its *cooked* contents into database, if local file was created or modified from disk.
|
|
|
|
// 4. mount any existing zipfile(s) after cooking.
|
|
|
|
//
|
|
|
|
// notes: meta-datas from every raw asset are stored into comment field, inside .cook.zip archive.
|
|
|
|
// @todo: fix leaks
|
|
|
|
// @todo: symlink exact files
|
|
|
|
// @todo: idle threads should steal jobs from busy threads (maybe use jobs/coroutines for this?) ...
|
|
|
|
|
|
|
|
enum COOK_FLAGS {
|
|
|
|
COOK_SYNC = 0,
|
|
|
|
COOK_ASYNC = 1,
|
|
|
|
COOK_CANCELABLE = 2,
|
|
|
|
COOK_DEBUGLOG = 4, // log all cooking commands to a batch file
|
|
|
|
};
|
|
|
|
|
|
|
|
API void cook_config( const char *path_to_cook_ini ); // "tools/cook.ini"
|
|
|
|
API bool cook_start( const char *path_to_cook_ini, const char *masks, int flags ); // COOK_INI, "**"
|
|
|
|
API void cook_stop();
|
|
|
|
API void cook_cancel();
|
|
|
|
API int cook_jobs(); // [0..N]
|
|
|
|
API int cook_progress(); // [0..100]
|
|
|
|
|
|
|
|
// utils
|
|
|
|
API bool have_tools();
|