Habituellement, j'essaie de séparer les informations spécifiques au maillage (VBO/VAO) des informations spécifiques à l'instance (transformation, uniformes, etc.).Réutilisation du VBO pour l'instanciation matérielle
De cette manière, les parties du code qui manipulent les informations d'instance n'ont pas besoin de savoir quoi que ce soit sur les VBO/VAO, et vice-versa.
Cependant, récemment, j'ai commencé à utiliser l'instanciation matérielle à l'aide de glDrawInstanced et le fait que les attributs d'instance soient liés ensemble dans le VAO rend ma séparation des problèmes plus difficile.
La raison en est que généralement le VBO/VAO a été construit à partir de mon chargeur .OBJ (qui a toutes les informations nécessaires pour construire cela) et d'autres parties du code ne s'inquiètent que des shaders uniformes. Maintenant, ces parties du code ont besoin de connaître la structure du VAO afin d'attacher l'information sur leurs attributs d'instance.
Cela devient encore plus gênant quand j'ai des VBO qui peuvent être réutilisés pour le rendu normal et instancié.
Existe-t-il une méthode recommandée qui permettrait de conserver une séparation des préoccupations entre la définition des attributs de maillage et des attributs d'instance? Je pensais avoir deux VAO, un pour le rendu normal et un autre pour le rendu instancié où j'ajouterais les attributs d'instance supplémentaires dont j'ai besoin, mais je n'ai trouvé aucun moyen de dupliquer ou d'inspecter les données VAO d'origine. besoin de connaître la structure réelle du VBO/VAO et pas seulement les paramètres d'instance.
Créer un autre niveau d'abstraction sur votre géométrie, qui va créer et dessiner des lots de données d'une manière spécifiée (avec ou sans instanciation). – Drop
Oui, c'est précisément ce que j'espérais éviter ... Je le ferai finalement si aucune autre suggestion ne se présente. – glopes