Share via


IDirect3DDevice9::CreateVertexBuffer-Methode (d3d9.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 Vertexpuffers in Bytes. Für FVF-Vertexpuffer muss Length groß genug sein, um mindestens einen Scheitelpunkt zu enthalten, aber es darf kein Vielfaches der Vertexgröße sein. Die Länge wird für Nicht-FVF-Puffer nicht ü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, wenn dieser Parameter auf Null festgelegt ist, ein Nicht-FVF-Vertexpuffer.

[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 wie folgt aussehen: D3DERR_INVALIDCALL, D3DERR_OUTOFVIDEOMEMORY, E_OUTOFMEMORY.

Hinweise

Ein Vertexpuffer kann entweder für die 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 Software- und Hardwareverarbeitung wechseln (mit IDirect3DDevice9::SetSoftwareVertexProcessing), nachdem das Gerät erstellt wurde.

Wenn ein Vertexpuffer 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 Verwendung des Vertexpuffers mit dem Geräteverhalten übereinstimmt. Beachten Sie, dass sich ein für die Softwareverarbeitung erstellter Vertexpuffer 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 IDirect3DDevice9 erstellt und können nur mit dem IDirect3DDevice9-Objekt verwendet werden, aus dem sie erstellt werden.

Bei Festlegung auf einen Wert ungleich Null, der ein gültiger FVF-Code sein muss, 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 einzigen Durchlauf zu verschachteln. Dazu enthält ein Puffer Geometriedaten, und der andere enthält Texturkoordinaten für jede Textur, die gerendert werden soll. Beim Rendern wird der Puffer, der die Geometriedaten enthält, mit jedem der Puffer überlagert, der die Texturkoordinaten enthält. Wenn stattdessen FVF-Puffer verwendet würden, müssten sie zusätzlich zu den Texturkoordinatendaten, die für jede gerenderte Textur spezifisch sind, identische Geometriedaten enthalten. Dies würde je nach verwendeter Strategie entweder zu einer Geschwindigkeits- oder Speichereinbuße führen. Weitere Informationen zu Texturkoordinaten finden Sie unter Texturkoordinaten (Direct3D 9).

Anforderungen

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

Weitere Informationen

IDirect3DDevice9

IDirect3DDevice9::P rocessVertices

IDirect3DVertexBuffer9::GetDesc

Vertexpuffer (Direct3D 9)