wip asset reload

main
Dominik Madarász 2023-09-18 12:00:16 +02:00
parent 5f6fbab4de
commit b7a6543c07
6 changed files with 35 additions and 18 deletions

View File

@ -19,12 +19,12 @@
#define noise_use_smoothstep
#define light_color vec3(0.1,0.4,0.6)
#define light_color vec3(0.3,0.4,0.6)
#define light_direction normalize(vec3(.2,1.0,-0.2))
#define light_speed_modifier 1.0
#define object_color vec3(0.9,0.1,0.1)
#define object_count 9
#define object_color vec3(0.93,0.2,0.1)
#define object_count 19
#define object_speed_modifier 1.0
#define render_steps 33

View File

@ -334108,6 +334108,10 @@ const char *vfs_resolve(const char *pathfile) {
return pathfile;
}
#ifndef VFS_ALWAYS_PACK
#define VFS_ALWAYS_PACK flag("--vfs-always-pack")
#endif
char* vfs_load(const char *pathfile, int *size_out) { // @todo: fix leaks, vfs_unpack()
// @fixme: handle \\?\ absolute path (win)
if (!pathfile[0]) return file_load(pathfile, size_out);
@ -334179,8 +334183,7 @@ if( found && *found == 0 ) {
ptr = vfs_unpack(pathfile, &size);
// asset not found? maybe it has not been cooked yet at this point (see --cook-on-demand)
if( !ptr && COOK_ON_DEMAND ) {
if( (!ptr && COOK_ON_DEMAND) || VFS_ALWAYS_PACK ) {
static thread_mutex_t mutex, *init = 0; if(!init) thread_mutex_init(init = &mutex);
thread_mutex_lock(&mutex);

View File

@ -681,6 +681,10 @@ const char *vfs_resolve(const char *pathfile) {
return pathfile;
}
#ifndef VFS_ALWAYS_PACK
#define VFS_ALWAYS_PACK flag("--vfs-always-pack")
#endif
char* vfs_load(const char *pathfile, int *size_out) { // @todo: fix leaks, vfs_unpack()
// @fixme: handle \\?\ absolute path (win)
if (!pathfile[0]) return file_load(pathfile, size_out);
@ -752,8 +756,7 @@ if( found && *found == 0 ) {
ptr = vfs_unpack(pathfile, &size);
// asset not found? maybe it has not been cooked yet at this point (see --cook-on-demand)
if( !ptr && COOK_ON_DEMAND ) {
if( (!ptr && COOK_ON_DEMAND) || VFS_ALWAYS_PACK ) {
static thread_mutex_t mutex, *init = 0; if(!init) thread_mutex_init(init = &mutex);
thread_mutex_lock(&mutex);

View File

@ -4803,6 +4803,10 @@ const char *vfs_resolve(const char *pathfile) {
return pathfile;
}
#ifndef VFS_ALWAYS_PACK
#define VFS_ALWAYS_PACK flag("--vfs-always-pack")
#endif
char* vfs_load(const char *pathfile, int *size_out) { // @todo: fix leaks, vfs_unpack()
// @fixme: handle \\?\ absolute path (win)
if (!pathfile[0]) return file_load(pathfile, size_out);
@ -4874,8 +4878,7 @@ if( found && *found == 0 ) {
ptr = vfs_unpack(pathfile, &size);
// asset not found? maybe it has not been cooked yet at this point (see --cook-on-demand)
if( !ptr && COOK_ON_DEMAND ) {
if( (!ptr && COOK_ON_DEMAND) || VFS_ALWAYS_PACK ) {
static thread_mutex_t mutex, *init = 0; if(!init) thread_mutex_init(init = &mutex);
thread_mutex_lock(&mutex);

View File

@ -21,6 +21,8 @@ typedef struct {
editor_t *ed;
int slot; //<< internal, used by plugin
bool opened;
uint64_t last_modified;
} asset_t;
#define PLUG_DECLARE(name) editor_vtable_t name##__procs = { name##_init, name##_tick, name##_quit, name##_ext };

View File

@ -1,4 +1,6 @@
#define COOK_ON_DEMAND 1
#define MAX_CACHED_FILES 0
#define VFS_ALWAYS_PACK 1
#include "v4k.c"
#include "pluginapi.h"
@ -13,11 +15,9 @@ array(asset_t) assets = 0;
#undef X
void load_editor(char *pname, editor_vtable_t f) {
char *name = STRDUP(pname); // @leak
editor_t ed = {0};
ed.f = f;
ed.name = file_base(STRDUP(name)); // @leak
ed.name = file_base(STRDUP(pname)); // @leak
PRINTF("loaded plugin: '%s'\n", ed.name);
array_push(editors, ed);
}
@ -62,6 +62,8 @@ void load_asset(const char *fname) {
asset_t asset = {0};
asset.name = STRDUP(fname);
asset.ed = *ed;
asset.opened = 1;
asset.last_modified = file_stamp(fname);
array_push(assets, asset);
if (asset.ed->f.init((struct asset_t*)array_back(assets))) {
FREE(asset.name);
@ -100,19 +102,23 @@ int main() {
for (int i=0; i<array_count(assets); i++) {
asset_t *f = (assets+i);
int open = 1;
if (ui_window(f->name, &open)) {
if (ui_window(f->name, &f->opened)) {
f->ed->f.tick(f);
// was the asset modified?
bool modified = f->last_modified != file_stamp(f->name);
ui_separator();
if (ui_button("reload asset") || !open) {
if (ui_button("reload asset") || modified) {
f->last_modified = file_stamp(f->name);
f->ed->f.quit(f);
f->ed->f.init(f);
}
if (ui_button("edit asset") || !open) {
if (ui_button("edit asset")) {
edit_asset(assets[i].name);
}
if (ui_button("close asset") || !open) {
if (ui_button("close asset") || !f->opened) {
f->ed->f.quit(f);
FREE(assets[i].name);
array_erase(assets, i);