Bonjour.
Dans les exemples simples de programmes DirectX, la boucle de rendu fonctionne plus ou moins toujours sur le même principe : pour chaque mesh, désigner le VertexBuffer, l'IndexBuffer, l'InputLayout, les shaders, les Textures, etc. et appeler Draw_quelquechose() .
Dans quelques sites, comme ici , ou même là dans la FAQ DirectX, on conseille d'optimiser la gestion des Buffers, en particulier en essayant de regrouper les données dans un nombre minimal de Buffers de taille assez importante (sans trop exagérer mais sans précisions supplémentaires sur le sujet...).
Je comprends bien l'idée. Néanmoins, je me pose quelques questions :
1- lorsqu'à chaque boucle je choisis un VB, un IB, un IL, un Shader, une Texture etc. , est-ce que le transfert des données vers la carte graphique se fait à ce moment-là, ou bien est-ce qu'il est fait dès la création du VB et de l'IB, par exemple, ou bien encore une fois au début, à la première utilisation uniquement mais plus ensuite ?
2- d'un autre côté, si les cartes actuelles ont des tas de giga-octets de mémoire, ça ne doit pas être seulement pour pouvoir stocker des Textures gigantesques, mais aussi retenir d'une Frame à l'autre les données utilisées lors de la Frame précédente, même si elles concernent plusieurs meshes totalement indépendants ?
3- et si c'est la solution 2, comment spécifier à la Carte qu'elle peut virer définitivement tels Buffers, ou bien préférer celui-ci à celui-là ?
Merci !
Partager