114 lines
3.2 KiB
Markdown
114 lines
3.2 KiB
Markdown
<!-- file: docs/development/008-WASM_TAURI_POC.md -->
|
||
<!-- version: 2 -->
|
||
|
||
# POC WebAssembly embarqué dans Tauri
|
||
|
||
## Objectif
|
||
|
||
Le POC vérifie qu'une même crate de gameplay Rust peut fonctionner :
|
||
|
||
- dans le runner Desktop SDL3 natif ;
|
||
- compilée en WebAssembly ;
|
||
- dans une WebView Tauri locale ;
|
||
- sans site distant ni serveur applicatif.
|
||
|
||
Le POC ne remplace pas le runner SDL3 natif.
|
||
|
||
## Découpage
|
||
|
||
```text
|
||
game-reflex-poc
|
||
|
|
||
+--> game-reflex-poc-desktop --> engine-v1-sdl --> SDL3 natif
|
||
|
|
||
+--> game-reflex-poc-tauri --wasm32--> wasm-bindgen --> Canvas Web
|
||
|
|
||
+--natif--> Tauri WebView
|
||
```
|
||
|
||
Le JavaScript ne contient aucune règle Reflex. Il traduit les événements pointeur vers l'adaptateur WASM et dessine la scène générique exposée par le moteur.
|
||
|
||
## Frontend local
|
||
|
||
Tauri agit comme hôte de fichiers Web statiques locaux. `frontendDist` pointe sur :
|
||
|
||
```text
|
||
Tauri/game-reflex-poc/frontend/
|
||
```
|
||
|
||
Aucun site, CDN, Vite ou gestionnaire de paquets JavaScript n'est requis par ce POC.
|
||
|
||
## Sécurité
|
||
|
||
La CSP reste locale. `wasm-unsafe-eval` est autorisé uniquement parce que la WebView charge du WebAssembly.
|
||
|
||
Aucun script distant n'est autorisé.
|
||
|
||
## Build WASM
|
||
|
||
Préparer une fois :
|
||
|
||
```bash
|
||
rustup target add wasm32-unknown-unknown
|
||
cargo install wasm-bindgen-cli --locked
|
||
```
|
||
|
||
Puis :
|
||
|
||
```bash
|
||
python3 scripts/build_reflex_tauri_wasm.py
|
||
```
|
||
|
||
Les fichiers générés sont ignorés par Git.
|
||
|
||
## Prérequis Tauri Linux
|
||
|
||
Le développement Tauri v2 requiert les bibliothèques système WebKitGTK/GTK correspondantes.
|
||
|
||
Sur Debian, vérifier notamment la présence de `libwebkit2gtk-4.1-dev` et des autres prérequis documentés par Tauri avant la gate Tauri.
|
||
|
||
Installer une fois le CLI si nécessaire :
|
||
|
||
```bash
|
||
cargo install tauri-cli --version "^2.0.0" --locked
|
||
```
|
||
|
||
## Exécution
|
||
|
||
Après génération du WASM :
|
||
|
||
```bash
|
||
cd crates/apps/game-reflex-poc-tauri
|
||
cargo tauri dev
|
||
```
|
||
|
||
Critères :
|
||
|
||
- une fenêtre locale 405 × 720 s'ouvre ;
|
||
- le Canvas affiche le même fond et la même cible que Reflex SDL3 ;
|
||
- cliquer sur la cible incrémente le score et déplace la cible ;
|
||
- aucun site distant n'est requis ;
|
||
- le runtime est identifiable comme `Desktop + Wasm + TauriWebView + KeyboardMouse`.
|
||
|
||
## Frontière services Web
|
||
|
||
Ce POC ne choisit aucune régie publicitaire.
|
||
|
||
Il valide seulement qu'une variante Tauri possède une WebView capable d'héberger une frontière Web distincte. Ads, rewarded ads, revive, analytics et autres services resteront derrière `engine-v1-platform-api` et feront l'objet de tranches dédiées.
|
||
|
||
## Frontière de dépendances WASM
|
||
|
||
Les crates de gameplay `game-reflex-poc` et `game-snake-poc` ne dépendent pas de `engine-v1-sdl`.
|
||
|
||
Le backend SDL3 appartient aux runners natifs. Cette séparation est obligatoire pour que le graphe `wasm32-unknown-unknown` ne tire pas SDL3 ni ses dépendances natives.
|
||
|
||
## Icône de développement
|
||
|
||
Tauri attend une icône PNG lors de la génération du contexte natif. Le POC contient donc :
|
||
|
||
```text
|
||
crates/apps/game-reflex-poc-tauri/icons/icon.png
|
||
```
|
||
|
||
Il s'agit d'une icône minimale de développement ; l'identité graphique définitive viendra plus tard.
|