Freigeben über


Vertexpuffer (Direct3D 9)

Vertexpuffer, dargestellt durch die IDirect3DVertexBuffer9 Schnittstelle, sind Speicherpuffer, die Vertexdaten enthalten. Vertexpuffer können einen beliebigen Vertextyp enthalten, der transformiert oder untransformiert, beleuchtet oder unlitiert ist und über die Verwendung der Renderingmethoden in der IDirect3DDevice9 Schnittstelle gerendert werden kann. Sie können die Scheitelpunkte in einem Scheitelpunktpuffer verarbeiten, um Vorgänge wie Transformation, Beleuchtung oder Generieren von Beschneidungskennzeichnungen auszuführen. Transformation wird immer ausgeführt.

Die Flexibilität von Vertexpuffern macht diese idealen Stagingpunkte zum Wiederverwenden von transformierten Geometrien. Sie können einen einzelnen Vertexpuffer, eine Transformation, ein Licht und einen Clip der Darin befindlichen Scheitelpunkte erstellen und das Modell in der Szene so oft wie nötig rendern, ohne es erneut zu transformieren, auch wenn sich der Renderzustand ändert. Dies ist hilfreich beim Rendern von Modellen, die mehrere Texturen verwenden: Die Geometrie wird nur einmal transformiert, und dann können Teile davon bei Bedarf gerendert werden, die mit den erforderlichen Texturänderungen interleaviert werden. Renderzustandsänderungen, die nach der Verarbeitung von Scheitelpunkten vorgenommen wurden, werden wirksam, wenn die Scheitelpunkte das nächste Mal verarbeitet werden.

Beschreibung

Ein Vertexpuffer wird in Bezug auf seine Funktionen beschrieben: Wenn er nur im Systemspeicher vorhanden sein kann, wenn er nur für Schreibvorgänge verwendet wird, und den Typ und die Anzahl von Scheitelpunkten, die er enthalten kann. All diese Eigenschaften werden in einer D3DVERTEXBUFFER_DESC Struktur gehalten.

Das Element "Format" ist auf D3DFMT_VERTEXDATA festgelegt, um anzugeben, dass es sich um einen Vertexpuffer handelt. Der Typ identifiziert den Ressourcentyp des Vertexpuffers. Das Element "Verwendungsstruktur" enthält allgemeine Funktionskennzeichnungen. Das flag D3DUSAGE_SOFTWAREPROCESSING gibt an, dass der Vertexpuffer mit softwarevertexverarbeitung verwendet werden soll. Das Vorhandensein des flags "D3DUSAGE_WRITEONLY" in "Usage" gibt an, dass der Vertexpufferspeicher nur für Schreibvorgänge verwendet wird. Dadurch wird der Treiber freigegeben, um die Vertexdaten an der besten Speicherposition zu platzieren, um schnelle Verarbeitung und Rendering zu ermöglichen. Wenn das D3DUSAGE_WRITEONLY Flag nicht verwendet wird, ist der Treiber weniger wahrscheinlich, die Daten an einem Ort zu platzieren, der für Lesevorgänge ineffizient ist. Dadurch werden einige Verarbeitungs- und Renderinggeschwindigkeiten geopfert. Wenn dieses Flag nicht angegeben ist, wird davon ausgegangen, dass Anwendungen Lese- und Schreibvorgänge für die Daten innerhalb des Vertexpuffers ausführen.

Pool gibt die Speicherklasse an, die für den Vertexpuffer zugeordnet ist. Das D3DPOOL_SYSTEMMEM Flag gibt an, dass das System den Vertexpuffer im Systemspeicher erstellt hat.

Das Size-Element speichert die Größe der Vertexpufferdaten in Bytes. Das FVF-Element enthält eine Kombination aus D3DFVF-, die den Typ von Scheitelpunkten identifizieren, die der Puffer enthält.

Speicherpool und Nutzung

Sie können Vertexpuffer mit der IDirect3DDevice9::CreateVertexBuffer Methode erstellen, die Poolparameter (Speicherklasse) und Verwendungsparameter verwendet. IDirect3DDevice9::CreateVertexBuffer kann auch mit einem angegebenen FVF-Code erstellt werden, der in der Verarbeitung fester Funktionen oder als Ausgabe von Prozessvertizes verwendet werden kann. Weitere Informationen finden Sie unter FVF-Vertexpuffer (Direct3D 9).

Das D3DUSAGE_SOFTWAREPROCESSING-Flag kann festgelegt werden, wenn die Datenverarbeitung im gemischten Modus oder bei der Softwarevertexverarbeitung (D3DCREATE_MIXED_VERTEXPROCESSING/D3DCREATE_SOFTWARE_VERTEXPROCESSING) für dieses Gerät aktiviert ist. D3DUSAGE_SOFTWAREPROCESSING müssen für Puffer festgelegt werden, die mit der Softwarevertexverarbeitung im gemischten Modus verwendet werden sollen, es sollte jedoch nicht für die bestmögliche Leistung festgelegt werden, wenn Hardwarevertexverarbeitung im gemischten Modus verwendet wird. (D3DCREATE_HARDWARE_VERTEXPROCESSING). Das Festlegen D3DUSAGE_SOFTWAREPROCESSING ist jedoch die einzige Option, wenn ein einzelner Puffer sowohl bei der Hardware- als auch bei der Softwarevertexverarbeitung verwendet werden soll. D3DUSAGE_SOFTWAREPROCESSING ist sowohl für gemischte als auch für Softwaregeräte zulässig.

Es ist möglich, Vertex- und Indexpuffer in den Systemspeicher zu erzwingen, indem D3DPOOL_SYSTEMMEM angegeben wird, auch wenn die Vertexverarbeitung in der Hardware erfolgt. Dies ist eine Möglichkeit, übermäßig große Mengen seitensperrten Speichers zu vermeiden, wenn ein Treiber diese Puffer in AGP-Speicher einlegt.

In diesem Abschnitt werden die Konzepte vorgestellt, die erforderlich sind, um Vertexpuffer in einer Direct3D-Anwendung zu verstehen und zu verwenden. Die Informationen sind in die folgenden Abschnitte unterteilt.

Direct3D-Ressourcen

Rendern aus Vertex- und Indexpuffern (Direct3D 9)

Indexpuffer (Direct3D 9)