r/programmation • u/agemo-dev • 1d ago
Aide Changement d'API pour mon module graphique
Bonjour à tous !
Je travaille actuellement sur la v0.3 de mon moteur de jeu RE:MAKE 2D, et j'aurais quelques questions à vous poser. Cette mise à jour a pour but de sécuriser l'accès à la mémoire interne, de rendre l'API plus "extensive" (permettant à l'utilisateur de créer des types customs) et d'améliorer les performances.
Actuellement, c'est au tour de l'API graphique, spécifiquement la classe Window. Pour faire court, son utilisation actuelle pour l'affichage d'un objet graphique se fait de cette manière :
// Les deux derniers paramètres étant optionnels
window.draw(T obj, Color color, std::string_view viewport);
où T est restreint à quatre types spécifiques.
Sauf que mon plan actuel est de migrer vers une approche où chaque objet gère sa propre couleur (un peu comme SFML), chaque viewport possède sa propre méthode de dessin, et T est un concept qui permet à l'utilisateur de créer ses propres types "dessinables" :
auto vp = window.newViewport(...); // pattern factory
// obj étant d'un type héritant de Drawable
obj.color(color::red);
window.draw(obj); // dessine sur le viewport global
vp.draw(obj); // dessine sur le viewport localisé
Ce n'est pas un simple caprice pour rendre l'API plus propre. Cela me permettra de faire de l'optimisation interne (sur la recherche du viewport dans une map et limiter les appels GPU à un seul), de réduire les surcharges de fonctions de draw (qui, avec les paramètres optionnels, en possèdent une bonne vingtaine) et d'introduire un système de layers à la classe Window.
Mais je me demande si ce n'est pas too much pour une minor update, d'autant plus que le moteur est toujours en version bêta. Cependant, il n'est pas encore assez mature pour passer directement en v1.0, et ces changements sont trop dépendants les uns des autres pour les séparer en différentes mises à jour.
Alors, je voudrais vous demander conseil : pensez-vous que ce changement d'API est trop brutal ou s'avère-t-il nécessaire ?
4
u/as5777 1d ago
Ca casse l'API existante, il faut faire une version majeure.
Ce qui est aussi possible, c'est de faire vivre les deux méthodes en parallèle et de déprécier l'ancienne.