4 个版本
0.7.10 | 2022年10月14日 |
---|---|
0.7.1 | 2022年6月11日 |
0.7.0 | 2021年12月23日 |
0.6.0 | 2021年10月22日 |
#317 in 图形API
用于 2 个库
8KB
212 行
pilka 🔩
Pilka 是一个跨平台的实时编码工具,用于创建着色器*演示,类似于 Bonzomatic、KodeLife 或 sh4der-jockey。
可用功能
- 热重载
- 保存着色器
- 截图
- 录制视频
- 计算后处理管线
如何使用
当前状态下,pilka
尝试寻找包含文件 shader.vert
和 shader.frag
的 shaders
文件夹,如果失败,pilka
将为您生成默认设置。然后在您喜欢的代码编辑器(VS、emacs、vim、ed 等)中打开着色器,每次保存后 pilka
会获取更改。
控制键
- F1: 打印帮助信息
- F2: 切换播放/暂停
- F3: 暂停并后退一帧
- F4: 暂停并前进一帧
- F5: 从第0帧重新播放(
Time
和Pos
= 0) - F6: 打印参数
- F7: 切换性能分析器
- F8: 切换后端
- F10: 保存着色器
- F11: 截图
- F12: 开始/停止录制视频
- ESC: 退出应用程序
- 箭头键: 改变
Pos
参数
(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
- 指定录制视频的时长--size u32xu32
- 指定窗口大小并锁定缩放--wgsl
- 创建wgsl
着色器的模板
选择后端
您可以使用 PILKA_BACKEND
变量选择要开始的哪个后端。目前有两个后端可用:"wgpu" 和 "ash"。如果变量的值不正确,将回退到默认后端 "wgpu"。
需求
需要 Vulkan SDK。
在最新的 macOS 上,为了允许捕获声音输入(以便生成 FFT 纹理),您需要:打开系统偏好设置,点击安全性与隐私,点击隐私标签,然后点击麦克风菜单项。确保 pilka
在列表中并且被选中...嗯,可能是这样。我没有 macOS。
安装
cargo install pilka
您也可以通过下载源代码并在本地构建来安装应用程序。
# or through ssh [email protected]:pudnax/pilka.git
git clone https://github.com/pudnax/pilka.git
cd pilka
cargo install --path .
依赖项
winit 是 Rust 生态系统中的“默认”窗口库。并且它为您覆盖了大多数跨平台问题。
png 用于将截图编码为 png 文件。
notify 是一个文件监视器并维护热重载。
naga 用于在运行时编译 GLSL 着色器。
ash 是 Vulkan 绑定。我选择 ash
因为我把 pilka
看作是一个学习项目,并希望接触最多的未接触过的 Vulkan。出于同样的原因,我没有使用 vulkano
、erupt
、vulkanism
、vkvk
。
wgpu 是一个跨不同图形 API(如 Vulkan、Metal、OpenGL)的 GPU 抽象层,并且作为除 ash
之外的 primary 后端。
puffin 是由 EmbarkStudios 编写的 Rust 语言的性能分析器,我将其集成到 pilka
中以便快速性能检查。
pollster 是一个小的阻塞执行器,用于消除异步 wgpu
API。
Ffmpeg 用于录制视频。据我所知,这是一个临时解决方案,之后我将切换到其发布时的 rav1e。
灵感来源(我从哪里偷代码)
示例
您可以通过在文件夹内执行 pilka
来运行任何示例
cd examples/cube
cargo run
cube | 细胞自动机 | 线段 |
---|---|---|
![]() |
![]() |
![]() |
抖动 | 圆形图案 | 孟哥海绵 |
![]() |
![]() |
![]() |
路径追踪 | 激光 | 斜切 |
![]() |
![]() |
![]() |
依赖项
~0.4–0.8MB
~19K SLoC