diff --git a/engine/joint/v4k.h b/engine/joint/v4k.h index b9026c8..335ffe4 100644 --- a/engine/joint/v4k.h +++ b/engine/joint/v4k.h @@ -333442,7 +333442,7 @@ const char** file_list(const char *cwd, const char *masks) { if( line[0] == '\0' ) continue; // do not insert system folders/files for(int i = 0; i < len; ++i ) if(line[i] == '\\') line[i] = '/'; - if( line[0] == '.' ) continue; + if( line[0] == '.' ) if( !strcmp(line,".git") || !strcmp(line,".vs") || !strcmp(line,".") || !strcmp(line,"..") ) continue; if( strstr(line, "/.") ) continue; // insert copy #if is(win32) @@ -333705,7 +333705,11 @@ typedef struct archive_dir { } archive_dir; static archive_dir *dir_mount; -static archive_dir *dir_cache; enum { MAX_CACHED_FILES = 16 }; // @todo: should we cache the cooked contents instead? ie, stbi() result instead of file.png? +static archive_dir *dir_cache; + +#ifndef MAX_CACHED_FILES // @todo: should this be MAX_CACHED_SIZE (in MiB) instead? +#define MAX_CACHED_FILES 32 // @todo: should we cache the cooked contents instead? ie, stbi() result instead of file.png? +#endif struct vfs_entry { const char *name; @@ -333723,17 +333727,18 @@ void vfs_reload() { array_resize(vfs_hints, 0); // @leak array_resize(vfs_entries, 0); // @leak - // mount virtual filesystems later (mounting order: low -> to -> high priority) - bool any_mounted = 0; + // mount virtual filesystems later (mounting order matters: low -> to -> high priority) +#if 0 for( int i = 0; i < JOBS_MAX; ++i) { - bool mounted = false; - mounted |= !!vfs_mount(va(".art[%02x].zip", i)); - mounted |= !!vfs_mount(va("%s[%02x].zip", app, i)); - mounted |= !!vfs_mount(va("%s%02x.zip", app, i)); - mounted |= !!vfs_mount(va("%s.%02x", app, i)); - any_mounted |= mounted; -// if(!mounted) break; + if( vfs_mount(va(".art[%02x].zip", i)) ) continue; + if( vfs_mount(va("%s[%02x].zip", app, i)) ) continue; + if( vfs_mount(va("%s%02x.zip", app, i)) ) continue; + //if( vfs_mount(va("%s.%02x", app, i)) ) continue; } +#else + // faster way + for( const char **file = file_list("./","*.zip"); *file; ++file) vfs_mount(*file); +#endif // vfs_resolve() will use these art_folder locations as hints when cook-on-demand is in progress. // cook-on-demand will not be able to resolve a virtual pathfile if there are no cooked assets on disk, diff --git a/engine/split/v4k_file.c b/engine/split/v4k_file.c index 5f94d06..56c6079 100644 --- a/engine/split/v4k_file.c +++ b/engine/split/v4k_file.c @@ -229,7 +229,7 @@ const char** file_list(const char *cwd, const char *masks) { if( line[0] == '\0' ) continue; // do not insert system folders/files for(int i = 0; i < len; ++i ) if(line[i] == '\\') line[i] = '/'; - if( line[0] == '.' ) continue; + if( line[0] == '.' ) if( !strcmp(line,".git") || !strcmp(line,".vs") || !strcmp(line,".") || !strcmp(line,"..") ) continue; if( strstr(line, "/.") ) continue; // insert copy #if is(win32) @@ -492,7 +492,11 @@ typedef struct archive_dir { } archive_dir; static archive_dir *dir_mount; -static archive_dir *dir_cache; enum { MAX_CACHED_FILES = 16 }; // @todo: should we cache the cooked contents instead? ie, stbi() result instead of file.png? +static archive_dir *dir_cache; + +#ifndef MAX_CACHED_FILES // @todo: should this be MAX_CACHED_SIZE (in MiB) instead? +#define MAX_CACHED_FILES 32 // @todo: should we cache the cooked contents instead? ie, stbi() result instead of file.png? +#endif struct vfs_entry { const char *name; @@ -510,17 +514,18 @@ void vfs_reload() { array_resize(vfs_hints, 0); // @leak array_resize(vfs_entries, 0); // @leak - // mount virtual filesystems later (mounting order: low -> to -> high priority) - bool any_mounted = 0; + // mount virtual filesystems later (mounting order matters: low -> to -> high priority) +#if 0 for( int i = 0; i < JOBS_MAX; ++i) { - bool mounted = false; - mounted |= !!vfs_mount(va(".art[%02x].zip", i)); - mounted |= !!vfs_mount(va("%s[%02x].zip", app, i)); - mounted |= !!vfs_mount(va("%s%02x.zip", app, i)); - mounted |= !!vfs_mount(va("%s.%02x", app, i)); - any_mounted |= mounted; -// if(!mounted) break; + if( vfs_mount(va(".art[%02x].zip", i)) ) continue; + if( vfs_mount(va("%s[%02x].zip", app, i)) ) continue; + if( vfs_mount(va("%s%02x.zip", app, i)) ) continue; + //if( vfs_mount(va("%s.%02x", app, i)) ) continue; } +#else + // faster way + for( const char **file = file_list("./","*.zip"); *file; ++file) vfs_mount(*file); +#endif // vfs_resolve() will use these art_folder locations as hints when cook-on-demand is in progress. // cook-on-demand will not be able to resolve a virtual pathfile if there are no cooked assets on disk, diff --git a/engine/v4k.c b/engine/v4k.c index 9018ee9..e0c4637 100644 --- a/engine/v4k.c +++ b/engine/v4k.c @@ -4350,7 +4350,7 @@ const char** file_list(const char *cwd, const char *masks) { if( line[0] == '\0' ) continue; // do not insert system folders/files for(int i = 0; i < len; ++i ) if(line[i] == '\\') line[i] = '/'; - if( line[0] == '.' ) continue; + if( line[0] == '.' ) if( !strcmp(line,".git") || !strcmp(line,".vs") || !strcmp(line,".") || !strcmp(line,"..") ) continue; if( strstr(line, "/.") ) continue; // insert copy #if is(win32) @@ -4613,7 +4613,11 @@ typedef struct archive_dir { } archive_dir; static archive_dir *dir_mount; -static archive_dir *dir_cache; enum { MAX_CACHED_FILES = 16 }; // @todo: should we cache the cooked contents instead? ie, stbi() result instead of file.png? +static archive_dir *dir_cache; + +#ifndef MAX_CACHED_FILES // @todo: should this be MAX_CACHED_SIZE (in MiB) instead? +#define MAX_CACHED_FILES 32 // @todo: should we cache the cooked contents instead? ie, stbi() result instead of file.png? +#endif struct vfs_entry { const char *name; @@ -4631,17 +4635,18 @@ void vfs_reload() { array_resize(vfs_hints, 0); // @leak array_resize(vfs_entries, 0); // @leak - // mount virtual filesystems later (mounting order: low -> to -> high priority) - bool any_mounted = 0; + // mount virtual filesystems later (mounting order matters: low -> to -> high priority) +#if 0 for( int i = 0; i < JOBS_MAX; ++i) { - bool mounted = false; - mounted |= !!vfs_mount(va(".art[%02x].zip", i)); - mounted |= !!vfs_mount(va("%s[%02x].zip", app, i)); - mounted |= !!vfs_mount(va("%s%02x.zip", app, i)); - mounted |= !!vfs_mount(va("%s.%02x", app, i)); - any_mounted |= mounted; -// if(!mounted) break; + if( vfs_mount(va(".art[%02x].zip", i)) ) continue; + if( vfs_mount(va("%s[%02x].zip", app, i)) ) continue; + if( vfs_mount(va("%s%02x.zip", app, i)) ) continue; + //if( vfs_mount(va("%s.%02x", app, i)) ) continue; } +#else + // faster way + for( const char **file = file_list("./","*.zip"); *file; ++file) vfs_mount(*file); +#endif // vfs_resolve() will use these art_folder locations as hints when cook-on-demand is in progress. // cook-on-demand will not be able to resolve a virtual pathfile if there are no cooked assets on disk, diff --git a/engine/v4k.html b/engine/v4k.html index 7d70f03..c9f65ef 100644 --- a/engine/v4k.html +++ b/engine/v4k.html @@ -591,7 +591,7 @@ details > summary::-webkit-details-marker { |Version: | 2023.9 | |:--------------|:------------| |Branch: | main | -|Commit: | 77 | +|Commit: | 78 | # [V·4·K 2023.9 ](https://v4k.dev) @@ -11826,6 +11826,7 @@ Other documentation examples: [dll](#dll), [strsplit](#strsplit), [strjoin](#str [aabb](#aabb), [acosf](#acosf), [array](#array), [array_at](#array_at), [array_back](#array_back), [array_bytes](#array_bytes), [array_cast](#array_cast), [array_clear](#array_clear), [array_copy](#array_copy), [array_count](#array_count), [array_data](#array_data), [array_empty](#array_empty), [array_erase](#array_erase), [array_foreach](#array_foreach), [array_foreach_ptr](#array_foreach_ptr), [array_free](#array_free), [array_init](#array_init), [array_insert](#array_insert), [array_pop](#array_pop), [array_pop_front](#array_pop_front), [array_push](#array_push), [array_push_front](#array_push_front), [array_realloc_](#array_realloc_), [array_reserve](#array_reserve), [array_resize](#array_resize), [array_reverse](#array_reverse), [array_search](#array_search), [array_shuffle](#array_shuffle), [array_sort](#array_sort), [array_unique](#array_unique), [array_vlen_](#array_vlen_), [asinf](#asinf), [atan2f](#atan2f), [axis](#axis), [benchmark](#benchmark), [boid](#boid), [capsule](#capsule), [cc4](#cc4), [cc8](#cc8), [ceilf](#ceilf), [client_send](#client_send), [client_send_bin](#client_send_bin), [client_send_bin_flags](#client_send_bin_flags), [client_send_flags](#client_send_flags), [client_terminate](#client_terminate), [conc4t](#conc4t), [concat](#concat), [copysignf](#copysignf), [cosf](#cosf), [countof](#countof), [ctor](#ctor), [defer](#defer), [do_once](#do_once), [dtor](#dtor), [each_array](#each_array), [each_array_ptr](#each_array_ptr), [each_map](#each_map), [each_map_ptr](#each_map_ptr), [each_map_ptr_sorted](#each_map_ptr_sorted), [each_set](#each_set), [each_set_ptr](#each_set_ptr), [each_substring](#each_substring), [expf](#expf), [floorf](#floorf), [fmodf](#fmodf), [frustum](#frustum), [gladLoadGL](#gladLoadGL), [hit](#hit), [hypotf](#hypotf), [ifdef](#ifdef), [ifdef_32](#ifdef_32), [ifdef_64](#ifdef_64), [ifdef_bsd](#ifdef_bsd), [ifdef_c](#ifdef_c), [ifdef_cl](#ifdef_cl), [ifdef_cpp](#ifdef_cpp), [ifdef_debug](#ifdef_debug), [ifdef_ems](#ifdef_ems), [ifdef_false](#ifdef_false), [ifdef_gcc](#ifdef_gcc), [ifdef_linux](#ifdef_linux), [ifdef_mingw](#ifdef_mingw), [ifdef_osx](#ifdef_osx), [ifdef_release](#ifdef_release), [ifdef_tcc](#ifdef_tcc), [ifdef_true](#ifdef_true), [ifdef_win32](#ifdef_win32), [ifndef](#ifndef), [is](#is), [isnt](#isnt), [json_count](#json_count), [json_float](#json_float), [json_int](#json_int), [json_key](#json_key), [json_string](#json_string), [line](#line), [log10f](#log10f), [logf](#logf), [macro](#macro), [map](#map), [map_cast](#map_cast), [map_clear](#map_clear), [map_count](#map_count), [map_erase](#map_erase), [map_find](#map_find), [map_find_or_add](#map_find_or_add), [map_find_or_add_allocated_key](#map_find_or_add_allocated_key), [map_foreach](#map_foreach), [map_foreach_ptr](#map_foreach_ptr), [map_foreach_ptr_sorted](#map_foreach_ptr_sorted), [map_free](#map_free), [map_gc](#map_gc), [map_init](#map_init), [map_init_int](#map_init_int), [map_init_ptr](#map_init_ptr), [map_init_str](#map_init_str), [map_insert](#map_insert), [mat33](#mat33), [mat34](#mat34), [mat44](#mat44), [obj_calloc](#obj_calloc), [obj_extend](#obj_extend), [obj_malloc](#obj_malloc), [obj_method](#obj_method), [obj_method0](#obj_method0), [obj_new](#obj_new), [obj_new0](#obj_new0), [obj_override](#obj_override), [obj_printf](#obj_printf), [plane](#plane), [poly](#poly), [powf](#powf), [profile](#profile), [profile_enable](#profile_enable), [profile_incstat](#profile_incstat), [profile_init](#profile_init), [profile_render](#profile_render), [profile_setstat](#profile_setstat), [quat](#quat), [ray](#ray), [scope](#scope), [set](#set), [set_cast](#set_cast), [set_clear](#set_clear), [set_count](#set_count), [set_erase](#set_erase), [set_find](#set_find), [set_find_or_add](#set_find_or_add), [set_find_or_add_allocated_key](#set_find_or_add_allocated_key), [set_foreach](#set_foreach), [set_foreach_ptr](#set_foreach_ptr), [set_free](#set_free), [set_gc](#set_gc), [set_init](#set_init), [set_init_int](#set_init_int), [set_init_ptr](#set_init_ptr), [set_init_str](#set_init_str), [set_insert](#set_insert), [sinf](#sinf), [sphere](#sphere), [sqrtf](#sqrtf), [strcatf](#strcatf), [strcmpi](#strcmpi), [stringf](#stringf), [strtok_r](#strtok_r), [tanf](#tanf), [triangle](#triangle), [va](#va), [vec2](#vec2), [vec2i](#vec2i), [vec3](#vec3), [vec3i](#vec3i), [vec4](#vec4), [xml_blob](#xml_blob), [xml_count](#xml_count), [xml_float](#xml_float), [xml_int](#xml_int) ## c h a n g e l o g +* 208a5d8: add changelog to docs (**Dominik Madarász**) * fb3e0c5: readme stuff (**Dominik Madarász**) * 0440bfd: ugly but works html5 cook (**Dominik Madarász**) * 64ee470: fix html5 build (**Dominik Madarász**) diff --git a/tools/cook.ini b/tools/cook.ini index 969fb7d..501682a 100644 --- a/tools/cook.ini +++ b/tools/cook.ini @@ -1,4 +1,4 @@ -; this is where you specify and configure the FWK pipeline. +; this is where you specify and configure the V4K pipeline. ; tweak the pipeline and add new importers just by editing this file. ; there is no flow control in this script file: lines are parsed and evaluated, from top to bottom.