Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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.

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