diff --git a/Makefile.dev b/Makefile.dev index d0baa95..0c1d5a4 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 + ./build/forge --frag=./shaders/frag.glsl .PHONY: install install: build diff --git a/README.md b/README.md index e9a4e60..a03b8c7 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ options: --help show this help message and exit -v, --version print version -s, --screen output screen number (default: primary) + -f, --frag fragment shader path (default: TODO) ``` ## Release guide @@ -90,20 +91,31 @@ make -f Makefile.dev release-arch - [ ] Handle compilation errors - [x] Minimal working fragment sample - [x] Hot-reload fragment shader - - [ ] Specify fragment shader path + - [x] Specify fragment shader path - [x] Force fullscreen - [x] Select screen as argument / config + - [ ] Clean code +- [ ] Multi-stage shaders + - [ ] Test 2 stages with render to texture + - [ ] 2 in 2 fx 1 mix 1 fx layout + - [ ] Include fragments with special directive + - [ ] 16 input + 16 fx definition and selection (with param) + - [ ] Feedback texture + - [ ] Clean code - [ ] Midi - [ ] Read Midi events - [ ] Read midi mapping config file - [ ] Write Midi events -- [ ] MVP - - [ ] Add required libraries in target build - - [ ] Include fragments with special directive - - [ ] Source mixing - [ ] Save midi state -- [ ] Advanced - - [ ] Video input - - [ ] Feedback input - [ ] Tap-tempo feature - - [ ] Monitor screen feature (other window) \ No newline at end of file + - [ ] Clean code +- [ ] Video input + - [ ] Fixed camera video + - [ ] Video mapping config file + - [ ] Clean code +- [ ] Monitor screen + - [ ] 2nd window + - [ ] Use buffers as panels (INA A FXA / DEBUG A+B FXA+B / INB B FXB) + - [ ] Clean code +- [ ] Packaging & install + - [ ] Clone "shaders" and config in system path at setup \ No newline at end of file diff --git a/src/args.c b/src/args.c index e7cbd77..e903fce 100644 --- a/src/args.c +++ b/src/args.c @@ -7,18 +7,19 @@ #include "config.h" void print_help(int status_code) { - puts(PACKAGE - " " VERSION "\n\n" - "usage: " PACKAGE " " - "[--help] " - "[-v] " - "[-s=SCREEN] " - "\n\n" - "Fusion Of Real-time Generative Effects.\n\n" - "options:\n" - " --help show this help message and exit\n" - " -v, --version print version\n" - " -s, --screen output screen number (default: primary)\n"); + puts(PACKAGE " " VERSION "\n\n" + "usage: " PACKAGE " " + "[--help] " + "[-v] " + "[-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" + " -v, --version print version\n" + " -s, --screen output screen number (default: primary)\n" + " -f, --frag fragment shader path (default: TODO)\n"); exit(status_code); } @@ -67,9 +68,7 @@ unsigned char parse_uchar(char *arg, char *value) { } Parameters parse_args(int argc, char **argv) { - Parameters params; - - params.screen = 0; + Parameters params = {0, 0}; int i; char *arg; @@ -84,10 +83,17 @@ Parameters parse_args(int argc, char **argv) { exit(EXIT_SUCCESS); } 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")) { + params.frag_path = value; } else { invalid_arg(arg); } } + if (params.frag_path == 0) { + fprintf(stderr, "required argument -f/--frag\n\n"); + exit(EXIT_FAILURE); + } + return params; } \ No newline at end of file diff --git a/src/forge.c b/src/forge.c index 811d0bf..5e3f427 100644 --- a/src/forge.c +++ b/src/forge.c @@ -181,7 +181,7 @@ void loop(GLFWwindow *window, ShaderProgram program) { void forge_run(Parameters params) { GLFWwindow *window; - File fragment_shader = read_file("shaders/tmp.glsl"); + File fragment_shader = read_file(params.frag_path); if (fragment_shader.error) { fprintf(stderr, "Cannot read file\n"); diff --git a/src/types.h b/src/types.h index f5a1a61..96ee2d0 100644 --- a/src/types.h +++ b/src/types.h @@ -9,6 +9,7 @@ typedef struct Parameters { unsigned char screen; + char *frag_path; } Parameters; typedef struct Vertex {