scena 1.3.0

A Rust-native scene-graph renderer with typed scene state, glTF assets, and explicit prepare/render lifecycles.
Documentation
# scena v1.1.0 Release Notes

Published: 2026-05-16.

Crates.io: <https://crates.io/crates/scena/1.1.0>.

docs.rs: <https://docs.rs/scena/1.1.0/scena/>.

## Scope

`scena` v1.1.0 is a browser-rendering reliability release. The public
`Backend::WebGl2` lane remains, but it now renders through wgpu + naga instead
of the deleted hand-written raw WebGL2 renderer. Native, WebGPU, and WebGL2 now
share the same renderer lifecycle, resource ownership, and WGSL shader source.

No public API changes in 1.1.0.

## Install

```bash
cargo add scena
```

Equivalent `Cargo.toml` entry:

```toml
[dependencies]
scena = "1.1"
```

## Fixed

- Repeated `Renderer::prepare()` calls on WebGL2 no longer retain the old raw
  GL buffer, texture, and program cache. This closes the failure family where
  WebGL2 prepare could grow GL resources until `GL_OUT_OF_MEMORY`, panic
  through wasm, and poison subsequent wasm-bindgen mutable borrows.
- Firefox WebGL2 and Chromium WebGL2 now use the wgpu/naga shader path instead
  of hand-written GLSL, so the ADR-0001 cross-stage uniform precision bug class
  is removed from the render path.
- WebGL2 material sampling uses a small wgpu shader/layout shim with ordinary
  `texture_2d` bindings. During the migration, wgpu 29's GL backend rendered
  material `texture_2d_array` samples black in Chromium WebGL2; the shim keeps
  the fallback inside wgpu without forking wgpu or naga.

## Removed

- Removed the hand-written WebGL2 renderer modules under `src/render/gpu`:
  `webgl2.rs`, `webgl2_program.rs`, `webgl2_camera.rs`,
  `webgl2_lighting.rs`, `webgl2_materials.rs`, `webgl2_texture_set.rs`, and
  `webgl2_vertices.rs`.
- Removed raw WebGL2 renderer `web-sys` bindings from `Cargo.toml`.

## Regression coverage

- `cargo test` covers the shared wgpu shader/material path and confirms the
  native/WebGPU material texture-array path remains intact.
- `cargo check --target wasm32-unknown-unknown --features browser-probe`
  confirms the browser probe build compiles on wasm.
- `wasm-pack build --dev --target web --out-dir target/m6-browser-pkg .
  --features browser-probe` built the v1.1.0 browser probe package.
- `SCENA_BROWSER_BACKENDS=webgl2 node tests/browser/m6_rust_wasm_renderer_probe.js`
  passed with `m6-rust-wasm-renderer-probe` status `passed`, nonblack
  canvas readback, model-viewer output, state/resource lifetime checks, and
  WebGL2 capability tier `Low`.
- `SCENA_BROWSER_BACKENDS=webgpu node tests/browser/m6_rust_wasm_renderer_probe.js`
  passed with `m6-rust-wasm-renderer-probe` status `passed`, renderer-owned
  GPU-copy readback, model-viewer output, state/resource lifetime checks, and
  WebGPU capability tier `Medium`.
- `xtask doctor` now forbids the retired raw WebGL2 renderer files and raw
  render-path bindings instead of requiring them.

## Compatibility

Drop-in replacement for 1.0.2. No source-incompatible API changes. Same MSRV.
Same feature flags. The browser capability matrix was remeasured by the M6
probe; WebGL2 remains the low-tier compatibility lane while WebGPU remains the
medium-tier browser lane. WebGL2 rendering behavior may differ slightly because
the backend now follows the shared wgpu/naga path.