Technique [D3D] - Programmation
Marsh Posté le 19-12-2001 à 22:33:58
reponse:  
ca depend. 
 
ca depend des contraintes et ce que tu veux 
faire avec ton moteur. 
Un vertex buffer est notoirement 
plus rapide quand il est en ecriture 
seule. Donc si tu peux, tu le mets 
en ecriture seule sauf si c'est un buffer 
de pretraitement (par exemple tu veux 
modifier les donnees transformees mais 
c'est contre performant, a reserver 
pour des effets tres speciaux et rares). 
 
De plus un certain nombre de donnees  
sont dynamiques et changent a chaque frame. 
(certaines formes de lod, vertex skinning 
sans passer par les capacites de dx8). 
 
Autre facteur a considerer 
le switch entre vertex buffer 
est couteux. Donc autant que possible 
limiter ce switch surtout que ce n'est 
pas la seule chose a changer 
(renderstates, textures etc..) 
entre les objets. 
 
Donc limiter si possible le nombre 
de vertex buffers (ceux de DX s'entend 
tes donnees a toi tu les stockes comme 
tu veux). Si possible utiliser 
du padding pour rendres les formats 
de vertex compatibles et donc limiter 
les switchs. Mettre les donnees 
de vertex dans un ordre de lecture lineaire 
surtout s'ils ne sont pas alignes sur 32 ou 64  
bits. utiliser les indices et les caches 
de vertex si possible. optimiser les strips. 
etc... etc..  
 
Evidemment si tu te fous de la performance 
tu fais comme tu veux c'est beaucoup 
moins prise de tete. 
 
A+ 
LEGREG 
Marsh Posté le 19-12-2001 à 19:09:15
Pour afficher un objet 3D, on doit avoir en mémoire un Vertex Buffer d'où le programme va extraire les sommets, les normales, etc...
En fait je me demandais si, pour programmer un jeu par exemple où il faut que le rendu soit très rapide, les programmeurs avaient en mémoire un Vertex Buffer pour chaque objet, ou si ils avaient en mémoire les sommets, les normales, etc... de chaque objet qu'ils passaient dans un Vertex Buffer UNIQUE avant de l'afficher puis de recharger le Vertex Buffer avec un autre objet puis de l'afficher à nouveau, etc...
A mon avis, il vaut mieux avoir un Vertex Buffer par objet, car la place prise par celui-ci doit être à peu près égale à celle que prendrait les données séparées, et de plus copié à chaque fois les données dans un buffer prendrait beaucoup de temps.
Mais je voulais quand même connaître votre avis, peut-être qu'il y a d'autres mécanismes qui rentrent en compte.