IDirect3DDevice9::CreateVertexBuffer-Methode (d3d9helper.h)

Erstellt einen Vertexpuffer.

Syntax

HRESULT CreateVertexBuffer(
  [in]          UINT                   Length,
  [in]          DWORD                  Usage,
  [in]          DWORD                  FVF,
  [in]          D3DPOOL                Pool,
  [out, retval] IDirect3DVertexBuffer9 **ppVertexBuffer,
  [in]          HANDLE                 *pSharedHandle
);

Parameter

[in] Length

Typ: UINT

Größe des Scheitelpunktpuffers in Bytes. Bei FVF-Vertexpuffern muss Die Länge groß genug sein, um mindestens einen Scheitelpunkt zu enthalten, aber es muss kein Vielfaches der Vertexgröße sein. Die Länge wird nicht für Nicht-FVF-Puffer überprüft. Siehe Hinweise.

[in] Usage

Typ: DWORD

Die Verwendung kann 0 sein, was keinen Nutzungswert angibt. Wenn die Verwendung jedoch gewünscht ist, verwenden Sie eine Kombination aus einer oder mehreren D3DUSAGE Konstanten. Es empfiehlt sich, den Verwendungsparameter in CreateVertexBuffer mit den Verhaltensflags in IDirect3D9::CreateDevice abzugleichen. Weitere Informationen finden Sie in den Hinweisen.

[in] FVF

Typ: DWORD

Kombination aus D3DFVF, einem Verwendungsspezifizierer, der das Scheitelpunktformat der Scheitelpunkte in diesem Puffer beschreibt. Wenn dieser Parameter auf einen gültigen FVF-Code festgelegt ist, ist der erstellte Vertexpuffer ein FVF-Vertexpuffer (siehe Hinweise). Andernfalls ist der Vertexpuffer ein Nicht-FVF-Vertexpuffer, wenn dieser Parameter auf 0 festgelegt ist.

[in] Pool

Typ: D3DPOOL

Member des D3DPOOL aufgezählten Typs, der eine gültige Speicherklasse beschreibt, in der die Ressource platziert werden soll. Legen Sie nicht auf D3DPOOL_SCRATCH fest.

[out, retval] ppVertexBuffer

Typ: IDirect3DVertexBuffer9**

Adresse eines Zeigers auf eine IDirect3DVertexBuffer9-Schnittstelle , die die erstellte Vertexpufferressource darstellt.

[in] pSharedHandle

Typ: HANDLE*

Reserviert. Legen Sie diesen Parameter auf NULL fest. Dieser Parameter kann in Direct3D 9 für Windows Vista zum Freigeben von Ressourcen verwendet werden.

Rückgabewert

Typ: HRESULT

Wenn die Methode erfolgreich ist, wird der Rückgabewert D3D_OK. Wenn die Methode fehlschlägt, kann der Rückgabewert einer der folgenden sein: D3DERR_INVALIDCALL, D3DERR_OUTOFVIDEOMEMORY, E_OUTOFMEMORY.

Hinweise

Ein Vertexpuffer kann mit der Hardware- oder Softwarevertexverarbeitung verwendet werden. Dies wird durch die Erstellung des Geräts und des Vertexpuffers bestimmt.

Wenn ein Gerät erstellt wird, verwendet CreateDevice das Verhaltensflag, um zu bestimmen, ob Scheitelpunkte in Hardware oder Software verarbeitet werden sollen. Es gibt drei Möglichkeiten:

  • Verarbeiten Sie Scheitelpunkte in Hardware, indem Sie D3DCREATE_HARDWARE_VERTEXPROCESSING festlegen.
  • Verarbeiten Sie Scheitelpunkte in Software, indem Sie D3DCREATE_SOFTWARE_VERTEXPROCESSING festlegen.
  • Verarbeiten Sie Scheitelpunkte in Hardware oder Software, indem Sie D3DCREATE_MIXED_VERTEXPROCESSING festlegen.
Geräte im gemischten Modus müssen möglicherweise zwischen Der Software- und Hardwareverarbeitung (mithilfe von IDirect3DDevice9::SetSoftwareVertexProcessing) wechseln, nachdem das Gerät erstellt wurde.

Wenn ein Scheitelpunktpuffer erstellt wird, verwendet CreateVertexBuffer den Verwendungsparameter, um zu entscheiden, ob Scheitelpunkte in Hardware oder Software verarbeitet werden sollen.

  • Wenn CreateDevice D3DCREATE_HARDWARE_VERTEXPROCESSING verwendet, muss CreateVertexBuffer 0 verwenden.
  • Wenn CreateDevice D3DCREATE_SOFTWARE_VERTEXPROCESSING verwendet, muss CreateVertexBuffer entweder 0 oder D3DUSAGE_SOFTWAREPROCESSING verwenden. Für beide Werte werden Scheitelpunkte in Software verarbeitet.
  • Wenn CreateDevice D3DCREATE_MIXED_VERTEXPROCESSING verwendet, kann CreateVertexBuffer entweder 0 oder D3DUSAGE_SOFTWAREPROCESSING verwenden.
Um einen Vertexpuffer mit einem Gerät im gemischten Modus zu verwenden, erstellen Sie einen einzelnen Vertexpuffer, der sowohl für die Hardware- als auch für die Softwareverarbeitung verwendet werden kann. Verwenden Sie IDirect3DDevice9::SetStreamSource , um den aktuellen Vertexpuffer festzulegen, und verwenden Sie bei Bedarf IDirect3DDevice9::SetRenderState, um das Geräteverhalten entsprechend zu ändern. Es wird empfohlen, dass die Vertexpuffernutzung mit dem Geräteverhalten übereinstimmt. Beachten Sie, dass sich ein für die Softwareverarbeitung erstellter Scheitelpunktpuffer nicht im Videospeicher befinden kann.

Die IDirect3DDevice9-Schnittstelle unterstützt das Rendern von Grundtypen mithilfe von Vertexdaten, die in Vertexpufferobjekten gespeichert sind. Vertexpuffer werden aus dem IDirect3DDevice9 erstellt und können nur mit dem IDirect3DDevice9-Objekt verwendet werden, aus dem sie erstellt werden.

Wenn sie auf einen Wert ohne Zero festgelegt ist, bei dem es sich um einen gültigen FVF-Code handelt, gibt der FVF-Parameter an, dass der Pufferinhalt durch einen FVF-Code gekennzeichnet werden soll. Ein Vertexpuffer, der mit einem FVF-Code erstellt wird, wird als FVF-Vertexpuffer bezeichnet. Weitere Informationen finden Sie unter FVF-Vertexpuffer (Direct3D 9).

Nicht-FVF-Puffer können verwendet werden, um Daten beim Rendern mit mehreren Pässen oder beim Rendern mit mehreren Texttexten in einem einzelnen Durchlauf zu verschachteln. Dazu enthält ein Puffer Geometriedaten, und die anderen enthalten Texturkoordinaten für jede texturierte Textur, die gerendert werden soll. Beim Rendern wird der Puffer, der die Geometriedaten enthält, mit jedem Puffer verschachtelt, der die Texturkoordinaten enthält. Wenn stattdessen FVF-Puffer verwendet würden, müsste jeder von ihnen identische Geometriedaten zusätzlich zu den Texturkoordinatendaten enthalten, die für jede gerenderte Textur spezifisch sind. Dies würde abhängig von der verwendeten Strategie entweder zu einer Geschwindigkeits- oder Speicherstrafe führen. Weitere Informationen zu Texturkoordinaten finden Sie unter Texturkoordinaten (Direct3D 9).

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d9helper.h (einschließlich D3D9.h)
Bibliothek D3D9.lib

Weitere Informationen

IDirect3DDevice9

IDirect3DDevice9::P rocessVertices

IDirect3DVertexBuffer9::GetDesc

Vertexpuffer (Direct3D 9)