feat: forge_project.cfg
This commit is contained in:
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
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
|
||||
@@ -12,7 +12,7 @@ Discover an engine where user-defined fragment shaders collide to produce stunni
|
||||

|
||||
|
||||
See [Demo #1 - 1H](https://youtu.be/HgErrasSs-w) and [Demo #2 - Monitor View](https://youtu.be/RW9Pno7YAzg) on YouTube
|
||||
|
||||
b
|
||||
<!-- omit from toc -->
|
||||
## 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
|
||||
|
||||
|
||||
+11
-11
@@ -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")) {
|
||||
|
||||
+7
-2
@@ -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);
|
||||
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user