frust-render 0.5.2

GPU backend for Frust: renders a frust-scene display list into a window surface through the frust-engine strip pipeline on wgpu.
Documentation
[package]
name = "frust-render"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
description = "GPU backend for Frust: renders a frust-scene display list into a window surface through the frust-engine strip pipeline on wgpu."
repository.workspace = true
homepage.workspace = true
keywords.workspace = true
categories.workspace = true
readme = "README.md"

[dependencies]
# Backend-free by design: the workspace row carries only wgpu's base
# (`std`/`parking_lot`/`wgsl`), and the per-OS backends (`vulkan`/`metal`/
# `dx12`) are added per target by `frust-gpu`'s
# `[target.'cfg(...)'.dependencies]` tables. This crate needs no tables of its
# own — `frust-gpu` is an unconditional dependency below, so cargo's additive
# feature unification supplies the target's backend through it. Adding
# backends to this row instead would re-union all three across every target;
# see `crates/frust-gpu/Cargo.toml` for the measured rationale.
wgpu.workspace = true
peniko.workspace = true
kurbo.workspace = true
frust-scene.workspace = true
anyhow.workspace = true
log.workspace = true
# The frust-owned sparse-strip render engine — the renderer this crate drives,
# and the only one it contains. NOT optional: the cargo feature that once
# gated it was retired once the engine became the sole renderer, so there is
# no build of this crate without it. A workspace-internal path dependency, so
# it carries no version pin of its own.
frust-engine.workspace = true
# The wgpu device/surface foundation. NOT optional: `RenderContext`,
# `SurfaceFactory`, `DetachedSurface`, the surface-lifecycle state machine, the
# pipeline-cache framing and the shader-effect pipelines all live there now and
# are re-exported from this crate's root unconditionally, which is what keeps
# the shells' own `use frust_render::…` lines unchanged.
frust-gpu.workspace = true

[features]
# NO default feature, and no renderer to select: `frust-engine` is a plain
# dependency above and its strip pipeline is the only renderer this crate
# contains. The tier feature that was once this crate's `default` is GONE — it
# named a choice that no longer exists, so every build of this crate,
# `--no-default-features` included, is an engine build. Vello classic is GONE
# too (its `vello` dependency and the env-var escape hatch that reached it
# were deleted when the engine became the default), as is the experimental
# `vello_cpu`-backed `cpu-tier` fallback, retired once the engine proved it
# needs no downlevel capability that fallback existed to cover.
#
# Opt-in perf-tracing probes: gates the
# `FRUST_TRACE`-driven surface-caps/render-path probe log lines in
# `context.rs`, plus (through the `frust-gpu/perf-trace` row below) the device
# request asking for `wgpu::Features::TIMESTAMP_QUERY` when the adapter offers
# it — what makes the engine's GPU-timestamp ring
# (`frust_gpu::diag::TimestampRing`) live rather than permanently inert. NOT
# default — a build without this feature compiles neither the probe bodies
# nor their `"frust-perf ..."` string literals, and never asks for the
# feature. The uncaptured-error handler is deliberately NOT behind this
# feature — it must keep working in a release build with no features
# enabled. Both rows forward unconditionally now that neither dependency is
# optional: `frust-engine` owns the per-pass timestamp spans, and `frust-gpu`
# owns the device request that asks for `TIMESTAMP_QUERY` — without that
# second row a `perf-trace` build would compile the probes and never get the
# feature that makes them live.
perf-trace = ["frust-engine/perf-trace", "frust-gpu/perf-trace"]

# Opt-in: re-exports `frust_gpu::DeviceHandle` (the device/queue/adapter
# handle a shell's render executor hands off through `frust-shell-common`'s
# process-wide slot — see that crate's `gpu` module) from this crate's root,
# alongside the always-public `RenderContext`. `frust-gpu` is NOT optional
# above (see its dependency comment), so this feature adds no new
# dependency — it only gates a re-export, keeping a default (non-`gpu`)
# build of this crate at zero new public symbols. Forwarded into by every
# shell's own `gpu` feature and by `frust`'s.
gpu = []

# Nothing in this crate reads an Android system property any more: the emulator
# probe that did (`is_android_emulator`, which strips the instance's DEBUG flags
# there) moved to `frust-gpu` with the rest of the device bring-up, and
# `frust-gpu` declares this dependency itself. The row is left standing rather
# than deleted because removing it re-resolves the lockfile of every standalone
# workspace that path-depends on this crate (`examples/*`,
# `benchmarks/frust_bench`, `plugins/clean-signals-frust`) as well as the root
# one — churn across shared lockfiles for no behaviour change. Retire it with
# the next deliberate lockfile sweep.
[target.'cfg(target_os = "android")'.dependencies]
android_system_properties.workspace = true

[dev-dependencies]
pollster = "0.4"
wgpu.workspace = true
peniko.workspace = true
kurbo.workspace = true
frust-scene.workspace = true