Files
forge-steel/DEVELOPMENT.md
T

4.3 KiB

Working on this project

Makefile.dev targets

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

# 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

  • Basics
    • Create GLSL Window
    • Load static fragment shader into GLSL
    • Add default uniforms
    • Read fragment shader from file
    • Handle compilation errors
    • Minimal working fragment sample
    • Hot-reload fragment shader (with arg)
    • Specify fragment shader path
    • Force fullscreen
    • Select screen as argument / config
    • fps in window title
    • Clean code
  • Multi-stage shaders
    • Test 2 stages with render to texture
    • 2 in 2 fx 1 mix 1 fx layout
    • Include common code
    • 16 input + 16 fx definition and selection (with const param)
    • Feedback texture
    • Shaders config file
      • uniform config
      • fragment config
      • subroutines config
    • demo mode
    • random seed injected into shaders
    • internal texture size for speed
    • pass state as uniform
    • debug shader (and in monitor)
    • random mode / demo mode with R/D key
    • Clean code and fix things
  • Midi
    • Read Midi events
    • Read midi mapping config file
    • Write Midi events
    • Send midi data to shaders
    • Save midi state
    • Load midi state from last save
    • State machine with A/B switch
    • Tap-tempo feature
    • Clean code and fix things
  • Video input
    • Fixed camera video
    • Pass video info to shaders
    • Sub process video reading
    • Shader based format mapping
    • Video mapping config file
    • Get first video size matching internal size
    • Other internal size for video
    • Pass input fps into shaders for debug
    • Clean code and fix things
  • Monitor screen
    • 2nd window
    • Use buffers as panels (INA A FXA / DEBUG A+B FXA+B / INB B FXB)
    • Clean code and fix things
    • Share openGL state between monitor and screen
  • Default project
    • split with includes
    • src 9 : sentences repeat h
    • src 10 : isometric grid
    • src 12 : pattern in my kitchen
    • src 13 : another pattern in my kitchen
    • src 14 : cursor with select
    • src 15 : random source
    • fx 11 : spill
    • fx 12 : game of life
    • fx 13 : sobel
    • fx 14 : colorize range (pretty color ranges)
    • fx 15 : random fx
    • frag 10 : move debug screen here
    • debug : add src/fx/A/B indicators
  • Other
    • forge_project.cfg
    • Define frag prefix in config
    • Use custom #include xxx.glsl preprocessor
    • Use snprintf isntead of sprintf (and strlcpy instand of strncpy)
    • Pass "heavy" struct as pointer to avoid stack overload
    • Clean and sort args
    • --auto-random / --no-auto-random
    • Dump failed compilation into tmp file
    • Update readme with usage documentation
    • Sample gif in README
    • Documentation in default config file
    • Clone "shaders" and config in system path at setup
    • Minimal sample shaders
    • Hotkey 0 to reset everything
    • Printable PDF of default scr/fx
    • Add NanoKontrol setup file
    • Find and fix opengl errors 0500 ?
  • Extra features
    • --auto-random-cycle=4
    • Arrows (up-down: bpm / left-right: cycle)
    • Save states (numkey: load / shift + numkey: save)
    • Configurable key codes
    • Key codes as inputs
    • Mouse position and scroll as inputs
    • Joystick as input
    • Record show as text files
    • Play from record text file
  • Fixes
    • Try to write NanoKontrol config
    • Investigate video device fps loss (bad unregister ?)
      • explore libv4l directly github (with -lv4l2)