Files
DOSSIER-STANDALONE/src-tauri/render3d/Cargo.toml
T
karim b4c4a2cc6b wgpu 22 → 29, glyphon 0.6 → 0.11: requestDevice-Shim entfällt
glyphon 0.11 ist die neueste zu wgpu 29 passende Version (wgpu 30 existiert
bereits, glyphon pinnt aber ^29). Das 22er-Limit maxInterStageShaderComponents
wird von 29 nicht mehr in requiredLimits gesendet — src/engine/requestDeviceShim.ts
komplett entfernt, beide Hook-Importstellen (useWasmPlanRenderer, useWasm3dRenderer)
angepasst. pollster 0.3→0.4, naga 22→29 mitgezogen. Alle Draw-/Text-Pfade
(draw_sequence, glyphon ColorMode::Web, widthScreen-Polylinien, Headless/Golden)
unverändert funktionsfähig.

Verifiziert: cargo check nativ (render2d/render3d/src-tauri) grün, cargo test
render2d 17/17 + Golden bit-exakt, render3d 29/29, wasm32 --features web für
beide grün, npx tsc -b + npm run build grün.
2026-07-03 18:17:41 +02:00

99 lines
4.3 KiB
TOML

[package]
name = "render3d"
version = "0.1.0"
edition = "2021"
description = "Nativer wgpu-3D-Renderer fuer die CAD-Modellsicht (Wand-Extrusion + Kamera + Pipeline)"
# Bewusst NICHT Teil des src-tauri-Workspaces: die Mesh-Bibliothek soll unabhaengig
# von Tauri baubar/testbar bleiben (headless, ohne Webview-Toolchain). Ausschluss
# laeuft ueber `exclude = ["render3d"]` im uebergeordneten src-tauri/Cargo.toml.
# Standalone (`cd render3d && cargo test/build`) bildet die Crate automatisch ihren
# eigenen Ein-Paket-Workspace (eigene Cargo.lock) — Muster: render2d.
#
# KEIN eigener `[workspace]`-Block hier: sobald `cad-tauri` render3d per Pfad als
# (optionale) Abhaengigkeit einbindet (Feature `native3d`), wuerde ein zweiter
# Workspace-Root INNERHALB des src-tauri-Baums Cargo mit "multiple workspace
# roots" abbrechen. Der Parent-`exclude` haelt die Crate trotzdem eigenstaendig.
# cdylib: von wasm-pack (Feature "web") fuer das .wasm-Modul benoetigt. rlib:
# damit die Crate weiterhin als Pfad-Abhaengigkeit (cad-tauri, Feature native3d)
# und im Test-/Bin-Build (spike3d) nutzbar bleibt. Der cdylib-Artefakt-Build auf
# nativen Zielen ist harmlos (leere Export-Oberflaeche ohne Feature "web").
[lib]
crate-type = ["cdylib", "rlib"]
[features]
# Standard: nur Mesh-Erzeugung (Wand-Extrusion) + Kamera/Matrizen + WGSL-Quellen.
# Diese Schicht ist serde-only, hat keine GPU-Abhaengigkeit und ist headless
# vollstaendig per `cargo test` pruefbar.
default = []
# GPU-Pipeline (wgpu). Baut auch headless (wgpu laedt Vulkan/GL erst zur Laufzeit
# dynamisch), rendert aber nur mit einer aktiven Grafik-Session. Enthaelt Tiefen-
# puffer, View-Projektions-Uniform und ein Directional-Light im Fragment-Shader.
render = ["dep:wgpu", "dep:bytemuck", "dep:pollster"]
# Fenster-Spike (winit) inkl. lauffaehigem Binary mit Orbit-Kamera. Braucht
# Wayland/X11 + eine Display-Session zur visuellen Verifikation.
window = ["render", "dep:winit", "dep:env_logger"]
# Browser-Bindings (wasm32 + WebGPU): dieselbe GPU-Schicht (`render`) hinter einer
# wasm-bindgen-Fassade (`web.rs`), die eine HTML-Canvas als wgpu-Surface bespielt.
# Baut NUR fuer target wasm32-unknown-unknown sinnvoll (wgpu waehlt dort das
# WebGPU-Backend). Die native Fensterschicht (`window`) bleibt davon unberuehrt.
# Muster: render2d/Cargo.toml (Feature "web").
web = [
"render",
"dep:wasm-bindgen",
"dep:wasm-bindgen-futures",
"dep:web-sys",
"dep:js-sys",
"dep:console_error_panic_hook",
"dep:serde_json",
]
[dependencies]
serde = { version = "1", features = ["derive"] }
# JSON-Modell (dieselbe Ableitung wie der native Push): im Web-Pfad zur Laufzeit
# geparst; optional, nur mit Feature "web".
serde_json = { version = "1", optional = true }
# --- GPU (nur mit Feature "render") ------------------------------------------
# Standard-Features von wgpu (wgsl, webgpu, dx12, metal + target-spezifisch
# Vulkan/GLES auf Linux). Version im Gleichschritt mit render2d: wgpu 29, weil
# glyphon (dort) noch keine 30 unterstuetzt — beide Crates teilen den Stand.
wgpu = { version = "29", optional = true }
bytemuck = { version = "1", optional = true, features = ["derive"] }
pollster = { version = "0.4", optional = true }
# --- Fenster (nur mit Feature "window") --------------------------------------
winit = { version = "0.30", optional = true }
env_logger = { version = "0.11", optional = true }
# --- Browser/WASM (nur mit Feature "web") ------------------------------------
# wasm-bindgen-Fassade + Canvas-Zugriff. Versionen bewusst breit ("0.2"/"0.3"),
# damit wasm-pack die passende wasm-bindgen-CLI selbst zieht.
wasm-bindgen = { version = "0.2", optional = true }
wasm-bindgen-futures = { version = "0.4", optional = true }
js-sys = { version = "0.3", optional = true }
console_error_panic_hook = { version = "0.1", optional = true }
web-sys = { version = "0.3", optional = true, features = [
"HtmlCanvasElement",
"Window",
"Document",
"console",
] }
[dev-dependencies]
serde_json = "1"
# naga validiert die WGSL-Quellen headless (Parser + Validator) im Test, ohne
# GPU/Display. Version an wgpu gekoppelt (transitiv ohnehin vorhanden).
naga = { version = "29", features = ["wgsl-in"] }
# Der Fenster-Spike ist nur mit Feature "window" verfuegbar; ohne das Feature
# wird das Binary aus dem Build ausgeschlossen (required-features).
[[bin]]
name = "spike3d"
path = "src/bin/spike3d.rs"
required-features = ["window"]