From a029d434b3f67c37bb4663be8e9b4d6623a32955 Mon Sep 17 00:00:00 2001 From: yuzu-eva Date: Wed, 23 Apr 2025 11:21:04 +0200 Subject: restructure project --- main.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 main.c (limited to 'main.c') diff --git a/main.c b/main.c new file mode 100644 index 0000000..952dd45 --- /dev/null +++ b/main.c @@ -0,0 +1,86 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "plug.h" + +#define ARRAY_LEN(xs) sizeof(xs)/sizeof(xs[0]) + +const char *libplug_file_name = "libplug.so"; +void *libplug = NULL; + +#ifdef HOTRELOAD +#define PLUG(name, ...) name##_t *name = NULL; +#else +#define PLUG(name, ...) name##_t name; +#endif +LIST_OF_PLUGS +#undef PLUG + +#ifdef HOTRELOAD +bool reload_plugin(void) +{ + + if (libplug != NULL) dlclose(libplug); + + libplug = dlopen(libplug_file_name, RTLD_NOW); + if (libplug == NULL) { + fprintf(stderr, "ERROR: could not load %s: %s", libplug_file_name, dlerror()); + return false; + } + + #define PLUG(name, ...) \ + name = dlsym(libplug, #name); \ + if (name == NULL) { \ + fprintf(stderr, "ERROR: could not find %s symbol in %s: %s", \ + #name, libplug_file_name, dlerror()); \ + return false; \ + } + LIST_OF_PLUGS + #undef PLUG + + return true; +} +#else +#define reload_plugin() true +#endif + +int main(void) +{ + if (!reload_plugin()) return 1; + + size_t factor = 60; + SetConfigFlags(FLAG_WINDOW_RESIZABLE); + + InitWindow(factor*16, factor*9, "MVis"); + SetTargetFPS(60); + InitAudioDevice(); + + plug_init(); + + while (!WindowShouldClose()) { + if (IsKeyPressed(KEY_O)) { + void *state = plug_pre_reload(); + if (!reload_plugin()) return 1; + plug_post_reload(state); + } + + if (IsKeyPressed(KEY_X)) { + break; + } + + plug_update(); + } + + CloseAudioDevice(); + CloseWindow(); + + return 0; +} -- cgit v1.2.3