2025-11-23 : Évolutions et essai de prototype

Contexte

J'évoquais dans le précédent article la nécessité d'une refonte quasi complète. Et aussi en profiter pour changer complètement d'architecture.

Notamment je mentionnais :

Prototypes

C++/WinUI et Win2D

Mon premier prototype de C++/WinUI 3, avec donc une interface écrite en XAML.

L'interface se compose d'une barre de menu, une barre de commande, une barre d'état, et la zone centrale est réservée au dessin. Le dessin est réalisé avec la technologie Win2D, particulièrement facile à prendre en main.

Mais Win2D n'est qu'une surcouche sur Direct2D. Comme je cherche des performances optimales, je veux vraiment basculer sur Direct2D.

C# / WinUI 3 & C++/WinRT avec interop C#/C++ via WinRT & Direct2D

Comme l'interface est proche de ce qui se fait en C#, je préfèrerais basculer en C# pour la partie interface et garder tout le reste (calculs et dessin) en C++. C'est possible en utilisant le schéma d'une double application avec une communication entre les 2 modules :

La communication se fait par Interop C# ↔ C++ via WinRT.

Direct2D est hébergé dans un contrôle WinUI (en swapchain).

Ce choix d'architecture présente de nombreux avantages :

Néanmoins, la mise au point initiale s'avère particulièrement complexe. Je crée donc une solution composée de :

Puis j'améliore l'interface côté C#, et j'assure la communication entre les 2 projets (le plus difficile), en enfin, le branchement de Direct2D avec un peu de dessin.

Voici l'aperçu de cette application de base dessinant grâce à Direct2D un disque noir centré sur un fond bleu nuit avec sa barre de menu, sa barre de commande et sa barre d'état :

Par ailleurs, une interface de type responsive n'apparaît pas magiquement, il faut tout coder. Mais c'est quand même faisable sans réinventer chaque contrôle. Exemple quand la largeur de l'écran atteint une certaine taille avec une barre de commande dotée de textes :

Conclusions

Je vois enfin le début d'une application moderne ayant une interface elle aussi moderne, responsive. Et taillée pour la performance.

Avec quand même quelques petits malus : assez complexe à écrire et lourde à distribuer.

Je retiens cette architecture pour la nouvelle version de Heclium et aussi pour mon futur planétarium.

Et pour Ephemeridium, je pourrais aussi l'utiliser tout en remplaçant le vieux ruban par la nouvelle interface à base de barre de menu + barre de commande. Et en utilisant un simple contrôle web (WebView2) plus efficace que la solution actuelle.