Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pudnax/pilka
Another live-coding tool for creating shader demos, Vulkan+Wgpu powered.
https://github.com/pudnax/pilka
ash glsl graphics rust rust-lang shaders vulkan
Last synced: 13 days ago
JSON representation
Another live-coding tool for creating shader demos, Vulkan+Wgpu powered.
- Host: GitHub
- URL: https://github.com/pudnax/pilka
- Owner: pudnax
- License: mit
- Created: 2020-11-30T17:07:12.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2024-07-08T07:20:59.000Z (6 months ago)
- Last Synced: 2024-12-29T02:13:25.315Z (20 days ago)
- Topics: ash, glsl, graphics, rust, rust-lang, shaders, vulkan
- Language: Rust
- Homepage:
- Size: 10.9 MB
- Stars: 130
- Watchers: 4
- Forks: 7
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# pilka 🔩
[![Crates.io](https://img.shields.io/crates/v/pilka.svg)](https://crates.io/crates/pilka)
Pilka is a cross-platform live-coding tool for creating shader\* demos,
similar to [Bonzomatic](https://github.com/Gargaj/Bonzomatic), [KodeLife](https://hexler.net/products/kodelife) or [sh4der-jockey](https://github.com/slerpyyy/sh4der-jockey).Available features:
- [x] Hot-reload
- [x] Saving shaders
- [x] Taking screenshots
- [x] Recording videos
- [x] Compute pipeline for post processing![preview](menger_sponge.png)
## How
In current state `pilka` tries to seek `shaders` folder with the files
`shader.vert` and `shader.frag`, on fail `pilka` will generate
default setup for you. Then open shader in your favourite code editor (VS,
emacs, vim, ed etc.) and `pilka` would fetch changes after each save.## Controls
- F1: Print help
- F2: Toggle play/pause
- F3: Pause and step back one frame
- F4: Pause and step forward one frame
- F5: Restart playback at frame 0 (`Time` and `Pos` = 0)
- F6: Print parameters
- F10: Save shaders
- F11: Take Screenshot
- F12: Start/Stop record video
- ESC: Exit the application
- Arrows: Change `Pos`## Parameters
(per-draw-update)
| name | type | range |
| ------------- | ------- | ------- |
| position | vec3 | (-∞, ∞) |
| time | float | [0, ∞) |
| resolution | vec2 | [0, a] |
| mouse | vec2 | [-1, 1] |
| mouse_pressed | bool | |
| frame | uint | |
| time_delta | float | |
| record_period | float | |
| prev_frame | texture | |## Flags
- `--record f32` - Specify duration of recorded video
- `--size u32xu32` - Specify window size and lock from resizing## 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
```Bash
cargo install pilka
```You also can install the application by to downloading the source code
and build locally.```Bash
# or through ssh [email protected]:pudnax/pilka.git
git clone https://github.com/pudnax/pilka.git
cd pilka
cargo install --path .
```## Dependencies
[winit](https://crates.io/crates/winit) is the "default" window library in Rust ecosystem. And it covers
the most of cross-platform issues for you.[png](https://crates.io/crates/png) is used to encode screenshots into png files.
[notify](https://crates.io/crates/notify) is a file watcher and maintains the hot-reload.
[ash](https://crates.io/crates/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`, `vkvk`.**Ffmpeg** is used to record videos. For my concerns it's
temporary solution after which I switch to [rav1e](https://github.com/xiph/rav1e) on it's release.### Places of inspiration (from where I steal code):
- [piet-gpu](https://github.com/linebender/piet-gpu)
- https://github.com/w23/OpenSource