Ich scheine das nicht verstehen zu können. Microsoft sagt, dass eine der möglichen Optimierungen für eine Direct3D 11, wenn Grundelemente stapelweise aufgerufen werden sollen. Um beispielsweise 300 Dreiecke zu zeichnen, die jedes Mal die Draw-Methode aufrufen, müssen Sie stattdessen alle gleichzeitig packen und zeichnen.
Was ich nicht verstehe, ist, wie Sie sie tatsächlich an verschiedenen Orten und in allem zeichnen würden, weil ich zum Beispiel für jede eine andere Welttransformationsmatrix benötige. Das einzige, was mir in den Sinn kommt, ist, alles auf der CPU zu berechnen und die Werte für jeden Scheitelpunkt manuell festzulegen. Dieser Ansatz scheint mir jedoch keine sehr gute Codeoptimierung zu sein.
Ich habe das Gefühl, dass mir etwas fehlt, aber ich kann die Antwort nirgendwo finden. Die Frage ist: Wie können Sie Dinge in einen Draw-Aufruf packen, ohne dass sich der Renderstatus ändern muss, und trotzdem Objekte an verschiedenen Orten abrufen?
Beachten Sie, dass ich hier nicht nach Codeteilen frage, sondern hauptsächlich nach einer theoretischen Antwort darauf suche.
quelle
Sie könnten dann überrascht sein.
Dies hängt natürlich von der Komplexität der Geometrie ab, die Sie zeichnen, und von den Transformationen, die Sie darauf anwenden. Sie müssen jedoch berücksichtigen, dass die durch
Draw
Aufrufe verbrauchte CPU-Zeit nicht unerheblich ist. Es summiert sich sehr schnell, wenn Sie viele kleine Chargen haben. Wenn also die Geometrie und die Transformationen einfach sind, kann es sehr oft sehr sinnvoll sein, die (relativ teuren)Draw
Anforderungen gegen (relativ billige) CPU-basierte Transformationen auszutauschen.So funktioniert XNA
SpriteBatch
- es sammelt potenziell Tausende von Sprites in einem CPU-basierten Puffer, indem es Scheitelpunkte manuell transformiert, und sendet sie dann alle gleichzeitig an die GPU. Wenn SieDraw
Hunderte oder Tausende von Sprites separat aufrufen, wird Ihre Framerate in die Knie gezwungen. Die Berechnung der Positionen ihrer Scheitelpunkte ist jedoch einfach und schnell. Es ist ein großer Gewinn.Wie Tordin in seiner Antwort erklärt, können Sie mit Hardware-Instanzen Ihren Kuchen auch essen, was oft eine gute Idee ist. Die Idee, Grundelemente manuell zu stapeln, ist jedoch ein allgemeines Prinzip, das auch dann gilt, wenn keine Hardware-Instanzierung verfügbar ist.
quelle