Le moteur
Mon moteur de jeux et d’applications en Rust compilé en , sur lequel mes jeux sont portés un à un.
Ce que c’est
Le moteur est un produit privé, que je n’ai pas publié. Il s’agit d’une base de code en Rust, compilée en WebAssembly pour le navigateur, sur laquelle reposent mes jeux, mes applications d’apprentissage et mes sites. Il cible le web, le bureau natif et le terminal, et les applications qui l’utilisent épinglent chacune une version étiquetée. Il est en développement, et je porte dessus mes jeux un à un, à commencer par Atlas et Le repère.
Comment ça marche
Le code d’un jeu est un ensemble de systèmes ECS en Rust, et son interface est déclarée une seule fois, en Rust, comme un modèle de vue. Sur le web, Solid l’affiche dans le DOM, et sur le bureau un moteur de rendu wgpu en prend la place. Le rendu passe par WebGPU, avec WebGL2 en repli. Quatre fils d’exécution partagent la mémoire, de sorte que le fil principal ne fait que du travail de DOM et qu’une mise en page ne bloque jamais une image.
Chaque application déclare dans son manifeste les couples de réglage et de classe d’appareil qu’elle promet de tenir, comme la classe « poste d’élève » ou « téléphone ». La vérifie le poids de chaque version et le temps de calcul de chaque image pour ces couples, avec zéro allocation dans la boucle d’image. Une scène de référence scriptée par type d’application décide qu’un chantier est terminé.
Pourquoi il existe
Je voulais qu’un outil d’apprentissage puisse être aussi fluide et aussi soigné qu’un bon jeu. D’où des budgets de poids et de vitesse tenus par la CI plutôt que promis, et des services communs à toutes les applications (sauvegardes signées, français et anglais, accessibilité), pour qu’un jeu porté sur le moteur n’ait pas à les réécrire.
La salle de classe fixe le plancher : le poste d’élève de l’école, sous Linux avec un processeur graphique intégré, est l’une des classes d’appareil sur lesquelles les budgets sont mesurés. Le comportement propre à la classe reste dans chaque application et dans le déploiement sur les postes, jamais dans le moteur.