hot reload argument

This commit is contained in:
2025-09-12 22:40:00 +02:00
parent ff0a4ebdae
commit b7aa658e50
5 changed files with 15 additions and 9 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ build:
gcc -Wall -Wextra src/*.c src/*.h -lglfw -lGL -lm -Iinclude -ldl -o build/$(TARGET) gcc -Wall -Wextra src/*.c src/*.h -lglfw -lGL -lm -Iinclude -ldl -o build/$(TARGET)
run: build run: build
./build/forge --frag=./shaders/frag.glsl ./build/forge --hot-reload --frag=./shaders/frag.glsl
.PHONY: install .PHONY: install
install: build install: build
+4 -3
View File
@@ -48,13 +48,14 @@ make install
## CLI arguments ## CLI arguments
```txt ```txt
usage: forge [--help] [-v] usage: forge [-h] [-v] [-hr] [-s=SCREEN] [-f=FRAG_PATH]
Fusion Of Real-time Generative Effects. Fusion Of Real-time Generative Effects.
options: options:
--help show this help message and exit -h, --help show this help message and exit
-v, --version print version -v, --version print version
-hr, --hot-reload hot reload of shaders scripts
-s, --screen output screen number (default: primary) -s, --screen output screen number (default: primary)
-f, --frag fragment shader path (default: TODO) -f, --frag fragment shader path (default: TODO)
``` ```
@@ -90,7 +91,7 @@ make -f Makefile.dev release-arch
- [x] Read fragment shader from file - [x] Read fragment shader from file
- [ ] Handle compilation errors - [ ] Handle compilation errors
- [x] Minimal working fragment sample - [x] Minimal working fragment sample
- [x] Hot-reload fragment shader - [x] Hot-reload fragment shader (with arg)
- [x] Specify fragment shader path - [x] Specify fragment shader path
- [x] Force fullscreen - [x] Force fullscreen
- [x] Select screen as argument / config - [x] Select screen as argument / config
+8 -4
View File
@@ -9,15 +9,17 @@
void print_help(int status_code) { void print_help(int status_code) {
puts(PACKAGE " " VERSION "\n\n" puts(PACKAGE " " VERSION "\n\n"
"usage: " PACKAGE " " "usage: " PACKAGE " "
"[--help] " "[-h] "
"[-v] " "[-v] "
"[-hr] "
"[-s=SCREEN] " "[-s=SCREEN] "
"[-f=FRAG_PATH] " "[-f=FRAG_PATH] "
"\n\n" "\n\n"
"Fusion Of Real-time Generative Effects.\n\n" "Fusion Of Real-time Generative Effects.\n\n"
"options:\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" " -v, --version print version\n"
" -hr, --hot-reload hot reload of shaders scripts\n"
" -s, --screen output screen number (default: primary)\n" " -s, --screen output screen number (default: primary)\n"
" -f, --frag fragment shader path (default: TODO)\n"); " -f, --frag fragment shader path (default: TODO)\n");
exit(status_code); exit(status_code);
@@ -68,7 +70,7 @@ unsigned char parse_uchar(char *arg, char *value) {
} }
Parameters parse_args(int argc, char **argv) { Parameters parse_args(int argc, char **argv) {
Parameters params = {0, 0}; Parameters params = {0, 0, false};
int i; int i;
char *arg; char *arg;
@@ -76,11 +78,13 @@ Parameters parse_args(int argc, char **argv) {
for (i = 1; i < argc; i++) { for (i = 1; i < argc; i++) {
arg = argv[i]; arg = argv[i];
value = split_arg_value(arg); value = split_arg_value(arg);
if (is_arg(arg, "--help")) { if (is_arg(arg, "-h") || is_arg(arg, "--help")) {
print_help(EXIT_SUCCESS); print_help(EXIT_SUCCESS);
} else if (is_arg(arg, "-v") || is_arg(arg, "--version")) { } else if (is_arg(arg, "-v") || is_arg(arg, "--version")) {
puts(PACKAGE " " VERSION); puts(PACKAGE " " VERSION);
exit(EXIT_SUCCESS); 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")) { } else if (is_arg(arg, "-s") || is_arg(arg, "--screen")) {
params.screen = parse_uchar(arg, value); params.screen = parse_uchar(arg, value);
} else if (is_arg(arg, "-f") || is_arg(arg, "--frag")) { } else if (is_arg(arg, "-f") || is_arg(arg, "--frag")) {
+1 -1
View File
@@ -199,7 +199,7 @@ void forge_run(Parameters params) {
} }
while (!glfwWindowShouldClose(window)) { while (!glfwWindowShouldClose(window)) {
if (should_update_file(&fragment_shader)) { if (params.hot_reload && should_update_file(&fragment_shader)) {
update_file(&fragment_shader); update_file(&fragment_shader);
update_program(program, fragment_shader); update_program(program, fragment_shader);
} }
+1
View File
@@ -10,6 +10,7 @@
typedef struct Parameters { typedef struct Parameters {
unsigned char screen; unsigned char screen;
char *frag_path; char *frag_path;
bool hot_reload;
} Parameters; } Parameters;
typedef struct Vertex { typedef struct Vertex {