Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/facett

facett-map3d-flight/Cargo.toml

[package]
name = "facett-map3d-flight"
description = "facett — AAA planetary FLIGHT-SIM engine layer over facett-map3d: f64 floating origin (camera-relative rebase, kills far-from-origin jitter), precomputed atmospheric scattering (Bruneton/Hillaire-style transmittance LUT + sky-view + aerial perspective), and a 6DOF camera rig (free-fly / cinematic-orbit / flight-stick). GPU-required, full-screen, opt-in — the lightweight embeddable map stays in facett-map3d. Reuses (does not fork) facett-map3d's Mesh3 + wgpu pipeline."
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
# Development notes, agent instructions and machine-local tooling stay in the
# repository; they are not part of the published crate.
exclude = [
    ".nornir/",
]

[features]
# Pure-CPU foundation (floating origin, scattering model, camera rig, CDLOD terrain
# selection) is always available + headless-testable. `wgpu` turns on the GPU compute
# passes (scattering-LUT precompute, CDLOD height-morph parity); the default build is
# lean and the crate compiles + tests without a graphics adapter.
default = []
# `wgpu` turns on the GPU flight renderer's compute passes. Landed: the scattering-LUT
# precompute (`scatter_gpu`) → transmittance texture validated against the CPU oracle,
# and the CDLOD vertex height-morph (`cdlod::gpu` + `cdlod_morph.wgsl`) validated against
# the `morph_height` oracle. Still roadmap: the CDLOD/terrain render-pass wiring + GPU-
# compute extrusion. Pulls `facett-map3d`'s wgpu pipeline plus `wgpu`/`bytemuck`.
wgpu = ["facett-map3d/wgpu", "dep:wgpu", "dep:bytemuck"]
# `egui` adds the live `ControlFrame::from_egui` adapter (the interactive fly path).
# The controller core is egui-free + headless-testable; this only wires a real
# `egui::InputState` into it.
egui = ["dep:egui"]
# The FLIGHT `Facet` pane (src/facet.rs) needs a real egui surface; enable it in a
# dev/test build so the pane's robot + matrix cells run.
testmatrix = ["facett-core/testmatrix", "facett-map3d/testmatrix"]

[dependencies]
facett-core = { path = "../facett-core", version = "0.3.0" }
facett-map = { path = "../facett-map", version = "0.2.0" }
facett-map3d = { path = "../facett-map3d", version = "0.2.0" }
# `facett-osm` backs the on-disk `DirTileSource` (per-tile GeoParquet) for the §5
# out-of-core streamer; the pure grid + planner + in-memory source need no IO deps.
facett-osm = { path = "../facett-osm", version = "0.2.0" }
egui = { workspace = true, optional = true }
serde_json = { workspace = true }
# GPU scattering-LUT precompute pass (only compiled with `wgpu`). Versions match the
# egui 0.34 / wgpu 29 stack co-locked across the workspace (same as facett-map3d).
wgpu = { workspace = true, optional = true }
bytemuck = { version = "1", optional = true, features = ["derive"] }

[dev-dependencies]
# The FLIGHT pane's robot/matrix tests drive it as a `dyn Facet`, which needs the
# `egui` feature on this crate's own dev build.
facett-map3d-flight = { path = ".", features = ["egui"] }
# The streaming tests write synthetic per-tile `ways.parquet` fixtures across the
# Sweden grid (same Arrow/parquet path `facett-osm` reads).
arrow-array = "59"
arrow-schema = "59"
parquet = { version = "59", default-features = false, features = ["arrow", "zstd"] }
# Headless compute device for the GPU scattering-LUT parity proof (self-skips
# without an adapter). Same pollster 0.4 the facett-core GPU proofs block on.
pollster = "1"
# HEAVY terrain DEM bench (benches/heavy_terrain.rs). default-features off to stay
# light (no gnuplot/plotters), same convention as facett-map3d/benches/heavy_render.rs.
criterion = { version = "0.8", default-features = false }
# The GROUND-LOSS instrument (tests/ground_pixels_probe.rs) renders the REAL
# extruded city through facett-map3d's own GPU depth path and counts pixels per
# cartographic class. Same egui_kittest / image pin facett-map3d's own render
# proofs use — this crate is where the probe lives because it is the only one that
# already reads GeoParquet (`facett-osm`) AND owns facett-map3d.
egui_kittest = { version = "0.36", features = ["wgpu", "snapshot"] }
image = { version = "0.25", default-features = false, features = ["png"] }

[[bench]]
name = "heavy_terrain"
harness = false

[[bench]]
name = "heavy_daycycle"
harness = false