Native wgpu-Viewports (2D+3D) im Tauri-Prozess: echtes Modell + gehrte Ecken

- native.rs: EINE winit-EventLoop hostet 2D- und 3D-Fenster (winit erlaubt nur
  eine Loop pro Prozess) — loest den RecreationAttempt-Panic zweier Loops; ersetzt
  native2d.rs/native3d.rs. Feature-gegated (native2d/native3d, einzeln oder zusammen).
- render2d/render3d laden das ECHTE Modell aus assets/native2d_scene.json bzw.
  native3d_walls.json (Demo-Szene als Fallback); initialer Ausschnitt/Kamera aus
  den Modell-Grenzen gerahmt, initialer Redraw + gesetzte Fenstergroesse.
- TS-Konverter toRenderScene/toWalls3d + scripts/dump-native-scene erzeugen die
  JSON aus sampleProject/generatePlan (npm run dump:native).
- render2d: Scene.polylines fuer zusammenhaengende Umriss-/Zeichnungslaeufe →
  Gehrung statt Stumpfkappen an Wandecken/2D-Geometrien; MITER_LIMIT 4→8
  (deckungsgleich mit SVG stroke-miterlimit:8 und WebGL2).
- native3d-Feature + render3d-Pfad-Dep in der Tauri-Crate.
This commit is contained in:
2026-07-02 08:51:59 +02:00
parent c93b168f5c
commit bda256d3a4
15 changed files with 1045 additions and 276 deletions
+8
View File
@@ -23,6 +23,10 @@ default = []
# Zieht render2d(+window) sowie winit/wgpu/pollster. Bewusst OPT-IN, damit der
# normale Build unveraendert schlank bleibt.
native2d = ["dep:render2d", "dep:winit", "dep:wgpu", "dep:pollster"]
# M2-Spike: nativer wgpu-3D-Viewport im Tauri-Prozess (eigenes winit-Fenster).
# Zieht render3d(+window) sowie winit/wgpu/pollster. Kann gemeinsam mit `native2d`
# aktiviert werden (dann zwei native Fenster). Ebenfalls OPT-IN.
native3d = ["dep:render3d", "dep:winit", "dep:wgpu", "dep:pollster"]
[build-dependencies]
tauri-build = { version = "2", features = [] }
@@ -37,6 +41,10 @@ geometry = { path = "geometry" }
# render2d ist eine eigenstaendige Crate (eigener leerer [workspace]); wir binden
# sie hier per Pfad ein und aktivieren ihr GPU-Fenster-Feature "window".
render2d = { path = "render2d", features = ["window"], optional = true }
# render3d analog: eigenstaendige Crate (via Parent-`exclude` aus dem Workspace
# genommen, ohne eigenen [workspace]-Block); per Pfad mit GPU-Fenster-Feature
# "window" eingebunden.
render3d = { path = "render3d", features = ["window"], optional = true }
# Versionen an render2d gekoppelt (identische raw-window-handle 0.6-Kette).
winit = { version = "0.30", optional = true }
wgpu = { version = "22", optional = true }