Electron-Prototyp: eigenes App-Fenster statt Tauri/WebKitGTK

Ersetzt den Tauri-Webview-Weg testweise durch eine Electron-Shell (randlos,
ohne native Menüleiste, wie chromium-shell.sh), damit die WASM/WebGPU-Engine
zuverlässig laeuft statt in WebKitGTK. Rust-Backend nicht noetig, da
compute_joins einen TS-Fallback hat. npm run electron zum Starten.
This commit is contained in:
2026-07-02 23:51:23 +02:00
parent 27e41077b1
commit 34317e53f4
5 changed files with 254 additions and 7 deletions
+20 -7
View File
@@ -73,13 +73,26 @@ integrierter Engine-Viewport möglich). Die Engine-Rust-Crates sind in einem sp
Schritt 1:1 wiederverwendbar; nur die dünne WASM-Bindeschicht wäre dann Wegwerf. All-native
bleibt legitimes Fernziel, ist aber KEIN Weg zurück zu Tauri (Tauri IST der Webview-Shell).
>>> NÄCHSTER KONKRETER SCHRITT (neue Session zuerst): Electron-Prototyp. Nur additiv:
`electron` als devDep, ~30-Zeilen `main.js` (BrowserWindow + `app.commandLine.appendSwitch`
für WebGPU: `enable-unsafe-webgpu` + `enable-features=Vulkan` — dieselben Flags wie
`scripts/chromium-shell.sh`), lädt den Vite-Server (dev) bzw. `dist` (prod), npm-Script
`electron`. Verifizieren: App startet als eigenes Fenster, `?engine=wasm` rendert den
Engine-Viewport (WebGPU in Electron = wie Chromium). Rust-Backend NICHT nötig — `compute_joins`
hat TS-Fallback. Risikoarm, ~1 Session. Danach: render3d-WASM, Doppeltext-Fix.<<<
>>> ELECTRON-PROTOTYP: FERTIG (2026-07-02). <<<
`electron` als devDep, `scripts/electron-main.cjs` (BrowserWindow, `Menu.setApplicationMenu(null)`
+ `frame:false`/`autoHideMenuBar` für randloses Fenster wie chromium-shell.sh, WebGPU-Flags
`enable-unsafe-webgpu`+`enable-features=Vulkan`), `scripts/electron-shell.sh` (Dev-Server-Guard
wie chromium-shell.sh), npm-Script `npm run electron`. Verifiziert per Screenshot: App startet
als eigenes randloses Fenster, lädt den echten Grundriss (nicht leer). WICHTIG:
- **Datei muss `.cjs` sein** (`package.json` hat `"type":"module"`, Electron-Main läuft als CJS).
- **`ELECTRON_RUN_AS_NODE=1`** kann aus dem umgebenden Prozess (z.B. VSCode-Electron-Host)
vererbt sein — zwingt Electron in den Node-Modus (`require('electron')` liefert nur einen
Pfad-String statt `{app,...}``app` ist undefined). Immer mit `env -u ELECTRON_RUN_AS_NODE`
starten, falls das Fenster nicht öffnet / `app.commandLine` undefined ist.
- **WebGPU/`?engine=wasm` in Electron auf diesem System (niri/Wayland) fällt auf WebGL2 zurück**
(Ozone-Wayland+Vulkan-Warnung beim Start). `--ozone-platform=x11` GEHT NICHT (bricht die
Fenstererstellung komplett — GetGeometry/Vulkan-Surface-Fehler). System-Chromium
(`chromium-shell.sh`) rendert die WASM-Engine hingegen nachweislich (siehe [[wasm-engine-viewport]]-
Notizen); die verwendete Electron-Version (Paket sagt ^43, `--version` meldet v24 — Versions-
Mismatch, ggf. stale Binary-Cache) könnte ein älteres/anders konfiguriertes Chromium mitbringen.
TODO nächste Session: Electron-Version/Ozone-Flags weiter untersuchen, bevor der Prototyp der
primäre Dev-Weg wird — bis dahin bleibt WebGL2-Fallback der Standardpfad, funktional unverändert.
Danach: render3d-WASM, Doppeltext-Fix.<<<
Klarstellung an den User (er fragte, ob Webview = „billig"): NEIN — Figma (eigene C++/WASM-Engine
im Web-Shell), Onshape, VS Code zeigen, dass „eigene Engine + Web-UI" Top-Tier-Architektur ist.
CAD/BIM-Substanz = Modell + Engine + Normen (haben wir: parametrische Wände, SIA 416, DOSSIER-