pilka 🔩
Pilka is a cross-platform democoding tool for creating shader* demos, similar to Bonzomatic or KodeLife. Supports hot-reloading which means resources is checked, updated in the background.
Available features:
- Hot-reload
- Saving shaders
- Taking screenshot
- Record video
Controls
F1
: Toggles play/pauseF2
: Pauses and steps back one frameF3
: Pauses and steps forward one frameF4
: Restarts playback at frame 0 (Time
andPos
= 0)F5
: Print parametersF10
: Save shadersF11
: Take ScreenshotF12
: Start/Stop record videoESC
: Exit the applicationArrows
: ChangePos
Parameters
(per-draw-update)
name | type | range |
---|---|---|
position | vec3 | (-∞, ∞) |
time | float | [0, ∞) |
resolution | vec2 | [0, a] |
mouse | vec2 | [-1, 1] |
spectrum | float | [-1, 1] |
Requirements
Vulkan SDK is required.
On recent macOS, to allow sound input to be captured (for FFT textures to
be generated), you need to: Open up System Preferences, click on Security
& Privacy, click on the Privacy tab then click on the Microphone menu item.
Make sure pilka
is in the list and ticked...
erm, probably. I don't have macOS.
Installation
You also can install the application by to downloading the source code and build locally.
# or through ssh git@github.com:pudnax/pilka.git
Dependencies
winit is the "default" window library in Rust ecosystem. And it covers the most of cross-platform issues for you.
RustFFT is used to perform Fast FFT for generating sound textures.
cpal is used to capture sound from microphone and probably MIDI devices in the future.
png is used to encode screenshots into png files.
notify is a file watcher and maintains the hot-reload.
shaderc is used to compile GLSL shaders on the runtime instead of opening a process with glslc or glslangValidator. I hope to switch to naga soon, when it's mature enough.
ash is a Vulkan bindings. I choose ash
because I see pilka
as a
learning project and want to touch the maximum untouched Vulkan. For the
same reason I didn't use vulkano
, erupt
, vulkanism
, etc.
Ffmpeg is used to record and save to video. For my concerns it's temporary solution after which I switch to rav1e on it's release.