diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index c9ab4ee..edc7476 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -85,6 +85,8 @@ make -f Makefile.dev release-arch - [x] Clean code and fix things - [x] Share openGL state between monitor and screen - [ ] Other + - [x] `forge_project.cfg` + - [ ] Define frag prefix in config - [ ] Use custom `#include xxx.glsl` preprocessor - [ ] Update readme with usage documentation - [x] Documentation in default config file diff --git a/Makefile.am b/Makefile.am index 6fc255d..24c9fcb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,6 +5,6 @@ forge_CFLAGS = -Ofast -march=native -flto -funroll-loops -fprefetch-loop-arrays forge_LDADD = -lm -lGL -lglfw -lasound include_HEADERS = src/main.h src/args.h src/config.h src/types.h src/forge.h src/file.h src/constants.h src/window.h src/shaders.h src/timer.h src/string.h src/config_file.h src/rand.h src/video.h src/shared.h src/midi.h src/state.h src/arr.h src/tempo.h $(top_srcdir)/include/glad/gl.h $(top_srcdir)/include/glad/egl.h $(top_srcdir)/include/linmath.h $(top_srcdir)/include/hashmap.h $(top_srcdir)/include/log.h -EXTRA_DIST = default.cfg shaders/frag0.glsl shaders/frag1.glsl shaders/frag2.glsl shaders/frag3.glsl shaders/frag4.glsl shaders/frag5.glsl shaders/frag6.glsl shaders/frag7.glsl shaders/frag8.glsl shaders/frag9.glsl shaders/frag10.glsl +EXTRA_DIST = default/forge_project.cfg default/frag0.glsl default/frag1.glsl default/frag2.glsl default/frag3.glsl default/frag4.glsl default/frag5.glsl default/frag6.glsl default/frag7.glsl default/frag8.glsl default/frag9.glsl default/frag10.glsl confdir = $(prefix)/share/$(PACKAGE) -conf_DATA = default.cfg shaders/frag0.glsl shaders/frag1.glsl shaders/frag2.glsl shaders/frag3.glsl shaders/frag4.glsl shaders/frag5.glsl shaders/frag6.glsl shaders/frag7.glsl shaders/frag8.glsl shaders/frag9.glsl shaders/frag10.glsl \ No newline at end of file +conf_DATA = default/forge_project.cfg default/frag0.glsl default/frag1.glsl default/frag2.glsl default/frag3.glsl default/frag4.glsl default/frag5.glsl default/frag6.glsl default/frag7.glsl default/frag8.glsl default/frag9.glsl default/frag10.glsl \ No newline at end of file diff --git a/README.md b/README.md index 43288dc..d5b4dc7 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Discover an engine where user-defined fragment shaders collide to produce stunni ![](./images/preview.png) See [Demo #1 - 1H](https://youtu.be/HgErrasSs-w) and [Demo #2 - Monitor View](https://youtu.be/RW9Pno7YAzg) on YouTube - +b ## Table of Contents @@ -25,11 +25,12 @@ See [Demo #1 - 1H](https://youtu.be/HgErrasSs-w) and [Demo #2 - Monitor View](ht - [Usage](#usage) - [Runtime keybindings](#runtime-keybindings) - [CLI arguments](#cli-arguments) -- [Default Shaders and Config](#default-shaders-and-config) +- [Default Project](#default-project) - [Sources and Effects](#sources-and-effects) - [Debug View](#debug-view) - [NanoKontrol2 Controller mapping](#nanokontrol2-controller-mapping) -- [Making your own FORGE config](#making-your-own-forge-config) +- [Making your own FORGE project](#making-your-own-forge-project) + - [`forge_project.cfg`](#forge_projectcfg) - [Working with `frag0.glsl`](#working-with-frag0glsl) - [Frequently Asked Questions](#frequently-asked-questions) - [Why "steel"?](#why-steel) @@ -100,7 +101,7 @@ When running, the following keybindings are available: ### CLI arguments ```txt -usage: forge [-h] [-v] [-hr] [-s=SCREEN] [-m=SCREEN] [-mo] [-f=DIR_PATH] [-c=CFG_PATH] [-sf=STATE_PATH] [-ls / -nls] [-ss / -nss] [-is=SIZE] [-v=FILE] [-vs=SIZE] [-t=TEMPO] [--demo] [-w] +usage: forge [-h] [-v] [-hr] [-s=SCREEN] [-m=SCREEN] [-mo] [-p=PROJECT_PATH] [-c=CFG_FILE] [-sf=STATE_PATH] [-ls / -nls] [-ss / -nss] [-is=SIZE] [-v=FILE] [-vs=SIZE] [-t=TEMPO] [--demo] [-w] Fusion Of Real-time Generative Effects. @@ -111,8 +112,8 @@ options: -s, --screen output screen number (default: primary) -m, --monitor monitor screen number (default: none) -mo, --monitor-only no output screen - -f, --frag fragment shaders directory (default: /usr/share/forge/shaders) - -c, --config fragment shaders config file (default: /usr/share/forge/default.cfg) + -p, --project forge project directory (default: /usr/share/forge/default) + -c, --config config file name (default: forge_project.cfg) -sf, --state-file saved state file (default: forge_saved_state.txt) -ls, --load-state load saved state (default) -nls, --no-load-state do not load saved state @@ -128,7 +129,7 @@ options: --trace-fps print fps status of subsystems ``` -## Default Shaders and Config +## Default Project > A.K.A Kleπek's shaders @@ -166,7 +167,11 @@ TODO update > ⚠️ you'll need to change your NanoKontrol2 settings to remove the "toggle" behavior of the buttons and use "external" led control -## Making your own FORGE config +## Making your own FORGE project + +TODO + +### `forge_project.cfg` TODO diff --git a/default.cfg b/default/forge_project.cfg similarity index 100% rename from default.cfg rename to default/forge_project.cfg diff --git a/shaders/frag0.glsl b/default/frag0.glsl similarity index 100% rename from shaders/frag0.glsl rename to default/frag0.glsl diff --git a/shaders/frag1.glsl b/default/frag1.glsl similarity index 100% rename from shaders/frag1.glsl rename to default/frag1.glsl diff --git a/shaders/frag10.glsl b/default/frag10.glsl similarity index 100% rename from shaders/frag10.glsl rename to default/frag10.glsl diff --git a/shaders/frag2.glsl b/default/frag2.glsl similarity index 100% rename from shaders/frag2.glsl rename to default/frag2.glsl diff --git a/shaders/frag3.glsl b/default/frag3.glsl similarity index 100% rename from shaders/frag3.glsl rename to default/frag3.glsl diff --git a/shaders/frag4.glsl b/default/frag4.glsl similarity index 100% rename from shaders/frag4.glsl rename to default/frag4.glsl diff --git a/shaders/frag5.glsl b/default/frag5.glsl similarity index 100% rename from shaders/frag5.glsl rename to default/frag5.glsl diff --git a/shaders/frag6.glsl b/default/frag6.glsl similarity index 100% rename from shaders/frag6.glsl rename to default/frag6.glsl diff --git a/shaders/frag7.glsl b/default/frag7.glsl similarity index 100% rename from shaders/frag7.glsl rename to default/frag7.glsl diff --git a/shaders/frag8.glsl b/default/frag8.glsl similarity index 100% rename from shaders/frag8.glsl rename to default/frag8.glsl diff --git a/shaders/frag9.glsl b/default/frag9.glsl similarity index 100% rename from shaders/frag9.glsl rename to default/frag9.glsl diff --git a/src/args.c b/src/args.c index c7c9721..50c1828 100644 --- a/src/args.c +++ b/src/args.c @@ -20,8 +20,8 @@ static void print_help(int status_code) { "[-s=SCREEN] " "[-m=SCREEN] " "[-mo] " - "[-f=DIR_PATH] " - "[-c=CFG_PATH] " + "[-p=PROJECT_PATH] " + "[-c=CFG_FILE] " "[-sf=STATE_PATH] " "[-ls / -nls] " "[-ss / -nss] " @@ -40,10 +40,10 @@ static void print_help(int status_code) { " -s, --screen output screen number (default: primary)\n" " -m, --monitor monitor screen number (default: none)\n" " -mo, --monitor-only no output screen\n" - " -f, --frag fragment shaders directory " - "(default: " DATADIR "/shaders)\n" - " -c, --config fragment shaders config file " - "(default: " DATADIR "/default.cfg)\n" + " -p, --project forge project directory " + "(default: " DATADIR "/default)\n" + " -c, --config config file name " + "(default: forge_project.cfg)\n" " -sf, --state-file saved state file (default: " "forge_saved_state.txt)\n" " -ls, --load-state load saved state (default)\n" @@ -105,8 +105,8 @@ Parameters args_parse(int argc, char **argv) { params.output_screen = 0; params.monitor = false; params.monitor_screen = 0; - strncpy(params.frag_path, DATADIR "/shaders", STR_LEN); - strncpy(params.config_path, DATADIR "/default.cfg", STR_LEN); + strncpy(params.project_path, DATADIR "/default", STR_LEN); + strncpy(params.config_file, "forge_project.cfg", STR_LEN); strncpy(params.state_file, "forge_saved_state.txt", STR_LEN); params.load_state = true; params.save_state = true; @@ -131,10 +131,10 @@ Parameters args_parse(int argc, char **argv) { params.hot_reload = true; } else if (is_arg(arg, "-s") || is_arg(arg, "--screen")) { params.output_screen = parse_uint(arg, value); - } else if (is_arg(arg, "-f") || is_arg(arg, "--frag")) { - strncpy(params.frag_path, value, STR_LEN); + } else if (is_arg(arg, "-p") || is_arg(arg, "--project")) { + strncpy(params.project_path, value, STR_LEN); } else if (is_arg(arg, "-c") || is_arg(arg, "--config")) { - strncpy(params.config_path, value, STR_LEN); + strncpy(params.config_file, value, STR_LEN); } else if (is_arg(arg, "-sf") || is_arg(arg, "--state-file")) { strncpy(params.state_file, value, STR_LEN); } else if (is_arg(arg, "-ls") || is_arg(arg, "--load-state")) { diff --git a/src/forge.c b/src/forge.c index 8b22f6d..20528da 100644 --- a/src/forge.c +++ b/src/forge.c @@ -233,19 +233,24 @@ static void loop(bool hr, bool trace_fps) { void forge_run(Parameters params) { unsigned int frag_count, in_count; + char config_path[STR_LEN]; context = shared_init_context("/" PACKAGE "_context"); context->stop = false; - config = config_file_read(params.config_path); + strncpy(config_path, params.project_path, STR_LEN); + strcat(config_path, "/"); + strcat(config_path, params.config_file); + + config = config_file_read(config_path); frag_count = config_file_get_int(config, "FRAG_COUNT", 1); in_count = config_file_get_int(config, "IN_COUNT", 0); state_config = state_parse_config(config); - init_files(params.frag_path, frag_count); + init_files(params.project_path, frag_count); init_inputs(params.video_in, params.video_size); diff --git a/src/types.h b/src/types.h index 9ee56c8..985247d 100644 --- a/src/types.h +++ b/src/types.h @@ -35,8 +35,8 @@ typedef struct Parameters { unsigned int output_screen; bool monitor; unsigned int monitor_screen; - char frag_path[STR_LEN]; - char config_path[STR_LEN]; + char project_path[STR_LEN]; + char config_file[STR_LEN]; char state_file[STR_LEN]; bool load_state; bool save_state;