engawa-lisp 0.1.3

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](https://github.com/pleme-io/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.

```lisp
(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:

```rust
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.