Comme indiqué dans la documentation, les ventilateurs triangulaires ne sont pas pris en charge dans Direct3D 10 ou version ultérieure .
Pourquoi? Y a-t-il des inconvénients inhérents à travailler avec des ventilateurs triangulaires?
Comme indiqué dans la documentation, les ventilateurs triangulaires ne sont pas pris en charge dans Direct3D 10 ou version ultérieure .
Pourquoi? Y a-t-il des inconvénients inhérents à travailler avec des ventilateurs triangulaires?
Réponses:
Depuis plus d'une décennie, les fournisseurs de matériel ont poussé les bandes triangulaires, les listes de triangles indexés et les bandes triangulaires indexées comme les types primitifs les plus rapides à utiliser. Pourquoi? Les bandes ont une meilleure localité de cache (réutilisant les 2 derniers verts soumis au lieu d'avoir à revenir continuellement au premier) et l'indexation permet aux caches de vertex matériels de fonctionner réellement, ainsi que d'être plus efficace pour éliminer les verts en double.
Si tous les fournisseurs de matériel disent «faites-le de cette façon et vous allez être plus rapide», il y a de fortes chances que si vous le faites de cette façon, vous serez réellement plus rapide.
Donc, D3D10 + officialise simplement cela; si c'est le chemin rapide, c'est le chemin que vous allez utiliser et les autres chemins n'existeront pas. Cela est conforme à l'une des philosophies de conception du D3D10 +, qui est de vous mettre sur la voie rapide et de vous y maintenir.
Je ne sais pas dans quelle mesure cela affecte réellement le développement, mais comme pour tout changement de ce type, il a été dit qu'ils laisseraient les développeurs de pilotes écrire de meilleurs pilotes. La complexité des pilotes GPU est incroyable, mais je ne sais pas si ce changement exact aidera beaucoup.
Dans les deux cas, il est possible de remplacer les ventilateurs triangulaires pour la plupart de vos besoins (comme le rendu de polygones convexes) par des bandes, souvent avec de meilleurs résultats.
// A simplified API interface is presented for the purposes of having readable pseudocode
// Push( pos ) - pushes position data to make a new vertex
// TRIANGLE FANS:
for( i = 0; i < vertices.count; ++i )
Push( vertices[ i ] );
// TRIANGLE STRIPS:
for( i = 0; i < vertices.count; ++i )
{
if( i % 2 == 0 )
vertex = i / 2;
else
vertex = vertices.count - 1 - i / 2;
Push( vertices[ vertex ] );
}
EDIT: oublié de mentionner - si vous devez changer l'ordre de bobinage - inversez simplement le test dans ce "si" (== à! =).
(Cette question particulière mérite une réponse d'opinion :)
Subjectivement, je dirais son architecture astronautique. OpenGLES a également lancé beaucoup de choses pour le rendre `` moins complexe '' tout en poussant simplement la complexité sur chaque développeur avec du code hérité à la place.
Bien sûr, même si le matériel ne le prend pas en charge nativement, il aurait été trivial de fournir une compatibilité avec les personnes séquencant les fans de triangle en les convertissant en bandes ou triangles.
Les exécutions WebGL et autres doivent garder une trace des tampons validés et autres tout le temps, et les pilotes peuvent facilement gérer les personnes qui leur envoient des fans même s'ils ne le supportent pas.
Donc, tout le jet de FFP et ce n'est qu'un gros ennui de l' OMI.