engawa-lisp
Tatara-lisp authoring layer for engawa
render graphs.
Operators author render-graph pieces in a .tlisp file; this crate parses
and lowers them into engawa::RenderGraph ready for engawa-wgpu to
dispatch on a real GPU.
(defresource scene (texture 800 600))
(defresource post (texture 800 600))
(defmaterial scanlines
(shader (path "/etc/mado/effects/scanlines.wgsl"))
(bindings
(binding 0 uniform "frame")
(binding 1 texture "scene")
(binding 2 sampler "scene-sampler")))
(defgraph mado-pipeline
(output post)
(node clear-scene
(kind clear)
(output scene))
(node scanlines-pass
(kind fullscreen-effect)
(material scanlines)
(input scene)
(output post)))
Compile + dispatch:
use engawa::{Dispatcher, RecordingDispatcher, ResourceBindings, ResourceHandle};
let src = std::fs::read_to_string("mado.tlisp")?;
let compiled = engawa_lisp::parse_and_lower(&src)?.compile()?;
let bindings = ResourceBindings::new()
.with("scene", ResourceHandle::Texture("scene-tex".into()))
.with("post", ResourceHandle::Texture("post-tex".into()));
let mut d = RecordingDispatcher::new();
d.dispatch_graph(&compiled, &bindings)?;
Pairs with shikumi's notify-backed watcher for hot-reload — edit a
.tlisp, the graph rebuilds, the dispatcher picks up the new topology
without restart.
License
MIT.