Vertexpuffer (Direct3D 9)
Vertexpuffer, dargestellt durch die IDirect3DVertexBuffer9-Schnittstelle , sind Speicherpuffer, die Vertexdaten enthalten. Vertexpuffer können einen beliebigen Vertextyp enthalten – transformiert oder untransformiert, beleuchtet oder unbeleuchtet –, der mithilfe der Renderingmethoden in der IDirect3DDevice9-Schnittstelle gerendert werden kann. Sie können die Scheitelpunkte in einem Vertexpuffer verarbeiten, um Vorgänge wie Transformation, Beleuchtung oder Das Generieren von Clippingflags auszuführen. Die Transformation wird immer ausgeführt.
Die Flexibilität von Vertexpuffern macht sie zu idealen Stagingpunkten für die Wiederverwendung von transformierten Geometrien. Sie können einen einzelnen Vertexpuffer erstellen, transformieren, lichten und die Darin enthaltenen Scheitelpunkte beschneiden und das Modell in der Szene so oft wie nötig rendern, ohne es erneut zu transformieren, selbst bei änderungen des überlappenden Renderzustands. Dies ist beim Rendern von Modellen nützlich, die mehrere Texturen verwenden: Die Geometrie wird nur einmal transformiert, und teile davon können dann nach Bedarf gerendert werden, wobei die erforderlichen Texturänderungen miteinander verwoben 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 anhand seiner 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 der Scheitelpunkte, die er enthalten kann. Alle diese Merkmale werden in einer D3DVERTEXBUFFER_DESC-Struktur gespeichert.
Der Member Format ist auf D3DFMT_VERTEXDATA festgelegt, um anzugeben, dass es sich um einen Vertexpuffer handelt. Der Typ identifiziert den Ressourcentyp des Vertexpuffers. Das Member der Verwendungsstruktur enthält allgemeine Funktionsflags. Das flag D3DUSAGE_SOFTWAREPROCESSING gibt an, dass der Vertexpuffer bei der 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 kann der Treiber die Vertexdaten am besten speichern, um eine schnelle Verarbeitung und ein schnelles Rendering zu ermöglichen. Wenn das flag D3DUSAGE_WRITEONLY nicht verwendet wird, ist es weniger wahrscheinlich, dass der Treiber die Daten an einem Speicherort platziert, der für Lesevorgänge ineffizient ist. Dadurch wird eine gewisse Verarbeitungs- und Renderinggeschwindigkeit geopfert. Wenn dieses Flag nicht angegeben ist, wird davon ausgegangen, dass Anwendungen Lese- und Schreibvorgänge für die Daten im Vertexpuffer ausführen.
Pool gibt die Speicherklasse an, die für den Vertexpuffer zugeordnet ist. Das flag D3DPOOL_SYSTEMMEM gibt an, dass das System den Vertexpuffer im Systemspeicher erstellt hat.
Das Element Größe speichert die Größe der Vertexpufferdaten in Byte. Das FVF-Element enthält eine Kombination aus D3DFVF , die den Typ der Scheitelpunkte identifiziert, die der Puffer enthält.
Speicherpool und Nutzung
Sie können Vertexpuffer mit der IDirect3DDevice9::CreateVertexBuffer-Methode erstellen, die pool (Speicherklasse) und Nutzungsparameter akzeptiert. IDirect3DDevice9::CreateVertexBuffer kann auch mit einem angegebenen FVF-Code für die Verwendung in der Vertexverarbeitung fester Funktionen oder als Ausgabe von Prozessvertices erstellt werden. Weitere Informationen finden Sie unter FVF-Vertexpuffer (Direct3D 9).
Das D3DUSAGE_SOFTWAREPROCESSING-Flag kann festgelegt werden, wenn die Verarbeitung von gemischten Oder Softwarevertexen (D3DCREATE_MIXED_VERTEXPROCESSING/D3DCREATE_SOFTWARE_VERTEXPROCESSING) für dieses Gerät aktiviert ist. D3DUSAGE_SOFTWAREPROCESSING muss festgelegt werden, damit Puffer mit der Softwarevertexverarbeitung im gemischten Modus verwendet werden können, aber es sollte nicht für die bestmögliche Leistung festgelegt werden, wenn die 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 Hardware erfolgt. Dies ist eine Möglichkeit, zu große Mengen an seitengesperrten Speicher zu vermeiden, wenn ein Treiber diese Puffer in den AGP-Speicher einlegt.
In diesem Abschnitt werden die Konzepte vorgestellt, die zum Verstehen und Verwenden von Vertexpuffern in einer Direct3D-Anwendung erforderlich sind. Die Informationen sind in die folgenden Abschnitte unterteilt.
- Erstellen eines Vertexpuffers (Direct3D 9)
- Zugreifen auf den Inhalt eines Vertexpuffers (Direct3D 9)
- Rendern aus einem Vertexpuffer (Direct3D 9)
- FVF-Vertexpuffer (Direct3D 9)
- Vertexverarbeitung fester Funktionen (Direct3D 9)
- Programmierbare Vertexverarbeitung (Direct3D 9)
- Gerätetypen und Vertexverarbeitungsanforderungen (Direct3D 9)
Zugehörige Themen