# Working on this project ## Makefile.dev targets ```text clean remove build folder build build project into build/forge run run project with test args demo run project with demo mode valgrind valgrind analysis clean-release remove autoconf/automake files test-release try to build release release-% make full release of version % release-arch make arch-linux release package ``` ## Release guide ```shell # make full build make -f Makefile.dev release-1.0.0 # push release git push origin master --tags # create release from tag on github # attach .tar.gz to the github release make -f Makefile.dev release-arch # attach .pkg.tar.zst to the github release ``` ## Roadmap - [x] Basics - [x] Create GLSL Window - [x] Load static fragment shader into GLSL - [x] Add default uniforms - [x] Read fragment shader from file - [x] Handle compilation errors - [x] Minimal working fragment sample - [x] Hot-reload fragment shader (with arg) - [x] Specify fragment shader path - [x] Force fullscreen - [x] Select screen as argument / config - [x] fps in window title - [x] Clean code - [x] Multi-stage shaders - [x] Test 2 stages with render to texture - [x] 2 in 2 fx 1 mix 1 fx layout - [x] Include common code - [x] 16 input + 16 fx definition and selection (with const param) - [x] Feedback texture - [x] Shaders config file - [x] uniform config - [x] fragment config - [x] subroutines config - [x] demo mode - [x] random seed injected into shaders - [x] internal texture size for speed - [x] pass state as uniform - [x] debug shader (and in monitor) - [x] random mode / demo mode with R/D key - [x] Clean code and fix things - [x] Midi - [x] Read Midi events - [x] Read midi mapping config file - [x] Write Midi events - [x] Send midi data to shaders - [x] Save midi state - [x] Load midi state from last save - [x] State machine with A/B switch - [x] Tap-tempo feature - [x] Clean code and fix things - [x] Video input - [x] Fixed camera video - [x] Pass video info to shaders - [x] Sub process video reading - [x] Shader based format mapping - [x] Video mapping config file - [x] Get first video size matching internal size - [x] Other internal size for video - [x] Pass input fps into shaders for debug - [x] Clean code and fix things - [x] Monitor screen - [x] 2nd window - [x] Use buffers as panels (INA A FXA / DEBUG A+B FXA+B / INB B FXB) - [x] Clean code and fix things - [x] Share openGL state between monitor and screen - [x] Default project - [x] split with includes - [x] src 9 : sentences repeat h - [x] src 10 : isometric grid - [x] src 12 : pattern in my kitchen - [x] src 13 : another pattern in my kitchen - [x] src 14 : cursor with select - [x] src 15 : random source - [x] fx 11 : spill - [x] fx 12 : game of life - [x] fx 13 : sobel - [x] fx 14 : colorize range (pretty color ranges) - [x] fx 15 : random fx - [x] frag 10 : move debug screen here - [x] debug : add src/fx/A/B indicators - [ ] Other - [x] `forge_project.cfg` - [x] Define frag prefix in config - [x] Use custom `#include xxx.glsl` preprocessor - [x] Use snprintf isntead of sprintf (and strlcpy instand of strncpy) - [x] Pass "heavy" struct as pointer to avoid stack overload - [x] Clean and sort args - [x] `--auto-random` / `--no-auto-random` - [x] Dump failed compilation into tmp file - [x] Update readme with usage documentation - [ ] Sample gif in README - [x] Documentation in default config file - [x] Clone "shaders" and config in system path at setup - [ ] Minimal sample shaders - [ ] Hotkey `0` to reset everything - [x] Printable PDF of default scr/fx - [x] Add NanoKontrol setup file - [x] Find and fix opengl errors 0500 ? - [ ] Bonus - [ ] Record show as text files - [ ] Play from record text file - [ ] Try to write NanoKontrol config - [ ] Investigate video device fps loss (bad unregister ?) - explore libv4l directly [github](https://github.com/philips/libv4l) (with `-lv4l2`)