engawa-lisp 0.1.1

Tatara-lisp authoring layer for engawa render graphs. Operators write (defmaterial …) / (defgraph …) / (defeffect …) in a .tlisp file; this crate parses + lowers to engawa::RenderGraph. Pairs with shikumi's notify watcher for hot-reload.
Documentation

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.