Wie in der Dokumentation beschrieben, werden Dreiecklüfter in Direct3D 10 oder höher nicht unterstützt .
Warum? Gibt es Nachteile bei der Arbeit mit Dreieckslüftern?
Wie in der Dokumentation beschrieben, werden Dreiecklüfter in Direct3D 10 oder höher nicht unterstützt .
Warum? Gibt es Nachteile bei der Arbeit mit Dreieckslüftern?
Antworten:
Seit mehr als einem Jahrzehnt verwenden Hardwarehersteller Dreiecksleisten, indizierte Dreieckslisten und indizierte Dreiecksleisten als die am schnellsten zu verwendenden primitiven Typen. Warum? Strips haben eine bessere Cachelokalität (Wiederverwendung der letzten 2 gesendeten Verts, anstatt ständig zum ersten zurückzuspringen) und die Indizierung ermöglicht, dass Hardware-Vertex-Caches tatsächlich funktionieren und doppelte Verts effektiver eliminiert werden.
Wenn alle Hardwarehersteller sagen, dass Sie es so machen und schneller werden, besteht eine gute Chance, dass Sie tatsächlich schneller werden, wenn Sie es so machen.
Also formalisiert D3D10 + dies einfach; Wenn dies der schnelle Pfad ist, ist dies der Pfad, den Sie verwenden werden, und andere Pfade existieren nicht. Dies steht im Einklang mit einer der Designphilosophien von D3D10 +, mit der Sie auf die Überholspur gebracht und dort gehalten werden.
Ich weiß nicht, wie sehr sich dies auf die Entwicklung auswirkt, aber wie bei solchen Änderungen wurde gesagt, dass sie Treiberentwicklern ermöglichen werden, bessere Treiber zu schreiben. Die Komplexität der GPU-Treiber ist erstaunlich, aber ich bin nicht sicher, ob diese genaue Änderung viel hilft.
In beiden Fällen ist es möglich, Dreieckslüfter für die meisten Ihrer Anforderungen (wie das Rendern von konvexen Polygonen) durch Streifen zu ersetzen, häufig mit besseren Ergebnissen.
// 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 ] );
}
BEARBEITEN: vergessen zu erwähnen - wenn Sie Wicklungsreihenfolge ändern müssen - kehren Sie einfach den Test in diesem "wenn" (== zu! =).
(Diese spezielle Frage erfordert eine Meinungsantwort :)
Subjektiv würde ich sagen, seine Architektur Astronautik. OpenGLES hat auch eine Menge Dinge rausgeschmissen, um es weniger komplex zu machen, und gleichzeitig die Komplexität auf jeden einzelnen Entwickler mit altem Code übertragen.
Selbst wenn die Hardware dies von Haus aus nicht unterstützt, wäre es trivial gewesen, die Kompatibilität mit Leuten zu gewährleisten, die Triangel-Fans sequenzieren, indem sie sie in Streifen oder Dreiecke konvertieren.
WebGL-Laufzeiten und solche müssen die ganze Zeit über den Überblick über validierte Puffer behalten, und Treiber können problemlos Personen verwalten, die ihnen Fans senden, obwohl sie diese nicht unterstützen.
Also das ganze rauswerfen von FFP und so ist nur ein großer Ärger IMO.