From b7aa658e5012eadd7142ea5b48fbc7d4394320d1 Mon Sep 17 00:00:00 2001 From: klemek Date: Fri, 12 Sep 2025 22:40:00 +0200 Subject: [PATCH] hot reload argument --- Makefile.dev | 2 +- README.md | 7 ++++--- src/args.c | 12 ++++++++---- src/forge.c | 2 +- src/types.h | 1 + 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Makefile.dev b/Makefile.dev index 0c1d5a4..c47d0d1 100644 --- a/Makefile.dev +++ b/Makefile.dev @@ -12,7 +12,7 @@ build: gcc -Wall -Wextra src/*.c src/*.h -lglfw -lGL -lm -Iinclude -ldl -o build/$(TARGET) run: build - ./build/forge --frag=./shaders/frag.glsl + ./build/forge --hot-reload --frag=./shaders/frag.glsl .PHONY: install install: build diff --git a/README.md b/README.md index a03b8c7..3c141f2 100644 --- a/README.md +++ b/README.md @@ -48,13 +48,14 @@ make install ## CLI arguments ```txt -usage: forge [--help] [-v] +usage: forge [-h] [-v] [-hr] [-s=SCREEN] [-f=FRAG_PATH] Fusion Of Real-time Generative Effects. options: - --help show this help message and exit + -h, --help show this help message and exit -v, --version print version + -hr, --hot-reload hot reload of shaders scripts -s, --screen output screen number (default: primary) -f, --frag fragment shader path (default: TODO) ``` @@ -90,7 +91,7 @@ make -f Makefile.dev release-arch - [x] Read fragment shader from file - [ ] Handle compilation errors - [x] Minimal working fragment sample - - [x] Hot-reload fragment shader + - [x] Hot-reload fragment shader (with arg) - [x] Specify fragment shader path - [x] Force fullscreen - [x] Select screen as argument / config diff --git a/src/args.c b/src/args.c index e903fce..d7a5ec2 100644 --- a/src/args.c +++ b/src/args.c @@ -9,15 +9,17 @@ void print_help(int status_code) { puts(PACKAGE " " VERSION "\n\n" "usage: " PACKAGE " " - "[--help] " + "[-h] " "[-v] " + "[-hr] " "[-s=SCREEN] " "[-f=FRAG_PATH] " "\n\n" "Fusion Of Real-time Generative Effects.\n\n" "options:\n" - " --help show this help message and exit\n" + " -h, --help show this help message and exit\n" " -v, --version print version\n" + " -hr, --hot-reload hot reload of shaders scripts\n" " -s, --screen output screen number (default: primary)\n" " -f, --frag fragment shader path (default: TODO)\n"); exit(status_code); @@ -68,7 +70,7 @@ unsigned char parse_uchar(char *arg, char *value) { } Parameters parse_args(int argc, char **argv) { - Parameters params = {0, 0}; + Parameters params = {0, 0, false}; int i; char *arg; @@ -76,11 +78,13 @@ Parameters parse_args(int argc, char **argv) { for (i = 1; i < argc; i++) { arg = argv[i]; value = split_arg_value(arg); - if (is_arg(arg, "--help")) { + if (is_arg(arg, "-h") || is_arg(arg, "--help")) { print_help(EXIT_SUCCESS); } else if (is_arg(arg, "-v") || is_arg(arg, "--version")) { puts(PACKAGE " " VERSION); exit(EXIT_SUCCESS); + } else if (is_arg(arg, "-hr") || is_arg(arg, "--hot-reload")) { + params.hot_reload = true; } else if (is_arg(arg, "-s") || is_arg(arg, "--screen")) { params.screen = parse_uchar(arg, value); } else if (is_arg(arg, "-f") || is_arg(arg, "--frag")) { diff --git a/src/forge.c b/src/forge.c index 5e3f427..829506f 100644 --- a/src/forge.c +++ b/src/forge.c @@ -199,7 +199,7 @@ void forge_run(Parameters params) { } while (!glfwWindowShouldClose(window)) { - if (should_update_file(&fragment_shader)) { + if (params.hot_reload && should_update_file(&fragment_shader)) { update_file(&fragment_shader); update_program(program, fragment_shader); } diff --git a/src/types.h b/src/types.h index 96ee2d0..20bd51f 100644 --- a/src/types.h +++ b/src/types.h @@ -10,6 +10,7 @@ typedef struct Parameters { unsigned char screen; char *frag_path; + bool hot_reload; } Parameters; typedef struct Vertex {