Files
games/docs/architecture/003-SDL3_PLATFORM_ABSTRACTION.md
2026-09-16 00:03:45 +02:00

2.5 KiB

Abstraction SDL3 et plateformes

Frontière générale

Le gameplay ne doit pas connaître directement Linux, Windows, macOS, Android ou le navigateur. SDL3 est une frontière technique commune, complétée par des services plateforme lorsqu'une capacité n'appartient pas au cœur SDL.

Game library
     │
Engine API
     │
SDL3 boundary
 ┌───┼───────────────┐
 │   │               │
Desktop           Android            Web
native            SDL/JNI            WASM/browser

Desktop

Le runner Desktop est la cible d'itération la plus rapide. Il utilise la crate lib du jeu et, à terme, le runtime SDL3 natif. Les entrées disponibles peuvent inclure clavier, souris, trackpad, gamepad et joystick.

La cible Desktop sert à tester le gameplay, le rendu, la boucle de jeu, l'audio et les abstractions communes sans imposer un déploiement sur émulateur ou téléphone.

Android

Android empaquette le jeu natif dans une application standard. La structure cible combine : SDL3 Android, une bibliothèque native Rust, la couche Java commune, les extensions Java spécifiques au jeu, les assets communs et spécifiques, puis les SDK Android requis.

Les fonctionnalités suivantes restent côté plateforme Android : lifecycle, JNI, Ads, Billing, haptique, share sheet, intégrations Play et autres API Android spécifiques.

Le gameplay Rust ne doit pas dépendre des classes Java ni d'une régie publicitaire particulière.

Web / WASM

La cible Web est prévue comme cible ultérieure. SDL3 peut être utilisé avec une chaîne Web adaptée, notamment Emscripten, tandis que le navigateur fournit ses propres contraintes de boucle d'événements, audio, stockage, permissions et interaction utilisateur.

Une version Web peut être équivalente au jeu natif ou être volontairement réduite pour jouer immédiatement depuis un lien, partager un challenge et orienter vers l'installation Android.

Contrats plateforme

Les différences non couvertes proprement par SDL3 passent par des contrats explicites, par exemple :

PlatformServices
├── Advertising
├── Billing
├── Sharing
├── Haptics
├── Leaderboard
├── CloudSave
├── Analytics
└── Notifications

Une génération de moteur ne doit pas obligatoirement imposer une nouvelle génération de bridge Android si ce contrat reste compatible.