en fait la facon dont j'ai fait ca c'était d'avoir une classe Entité qui contient un Visual, qui lui-même contient une description de mesh, une description de vertex shader et une description de pixel shader (et eventellement, des descriptions de textures, ou des bidules comme ca)
Lorsqu'on veut faire un rendu, on demande a toute les entités quel est leur visual, et a partir des descriptions, on charge les "vrais" mesh, textures et shaders.
Par exemple, une description de shader est en fait presque un shader, mais pas compilé; une description de texture serait plutôt un nom de fichier, encore qu'il est possible d'avoir des textures "procédurales" et de les générer a la volée), une description de mesh est un simple nom de fichier.
L'objet qui affiche, ou qu'il soit, est responsable pour charger les objets a partir de leurs descriptions, et les afficher. Si il n'y a pas d'objet qui affiche, les descriptions ne sont simplement pas chargées et rien n'est affiché.
Un autre truc sympa; si il y a deux objets qui savent charger et afficher (un OpenGL et un DirectX, par exemple), rien n'empêche d'avoir les deux, ils chargeront tous les deux a partir des descriptions, tout sera dupliqué et afficher deux fois dans deux fenêtres différentes.
On a ainsi un design assez simple, la barrière c'est la limite entre la description de la donnée et la donnée. Et il n'y a qu'une respnsabilité par objet!
Partager