Freigeben über


D3DHAL_DRAWPRIMITIVES2DATA Struktur (d3dhal.h)

Die D3DHAL_DRAWPRIMITIVES2DATA-Struktur enthält die Informationen, die die D3dDrawPrimitives2-Funktion zum Rendern von Grundtypen benötigt.

Syntax

typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
  ULONG_PTR                 dwhContext;
  DWORD                     dwFlags;
  DWORD                     dwVertexType;
  LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
  DWORD                     dwCommandOffset;
  DWORD                     dwCommandLength;
  union {
    LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
    LPVOID                    lpVertices;
  };
  DWORD                     dwVertexOffset;
  DWORD                     dwVertexLength;
  DWORD                     dwReqVertexBufSize;
  DWORD                     dwReqCommandBufSize;
  LPDWORD                   lpdwRStates;
  union {
    DWORD   dwVertexSize;
    HRESULT ddrval;
  };
  DWORD                     dwErrorOffset;
} D3DHAL_DRAWPRIMITIVES2DATA;

Member

dwhContext

Gibt das Kontexthandle des Direct3D-Geräts an.

dwFlags

Gibt Flags an, die dem Treiber zusätzliche Anweisungen oder Informationen vom Treiber bereitstellen. Dieser Member kann ein bitweises OR der folgenden Werte sein:

Wert Bedeutung
D3DHALDP2_EXECUTEBUFFER Die Befehls- und Vertexpuffer wurden im Systemspeicher erstellt. Der Treiber sollte das Statusarray aktualisieren, auf das lpdwRStates zeigt. Dieses Flag wird nur von Direct3D festgelegt.
D3DHALDP2_REQCOMMANDBUFSIZE Der Treiber muss in der Lage sein, den aktuellen Befehlspuffer um mindestens die in dwReqCommandBufSize angegebene Größe zu erhöhen. Treiber, die das Multibuffering von Befehlspuffern nicht unterstützen, können dieses Flag ignorieren. Dieses Flag wird nur von Direct3D festgelegt.
D3DHALDP2_REQVERTEXBUFSIZE Der Treiber muss in der Lage sein, einen Vertexpuffer von mindestens der in dwReqCommandBufSize angegebenen Größe zuzuweisen. Treiber, die das Multibuffering von Vertexpuffern nicht unterstützen, können dieses Flag ignorieren. Dieses Flag wird nur von Direct3D festgelegt.
D3DHALDP2_SWAPCOMMANDBUFFER Der Treiber kann den Puffer, auf den lpDDCommands zeigt, durch einen neuen Befehlspuffer austauschen und sofort zurückgeben, wobei der ursprüngliche Puffer asynchron verarbeitet wird, während Direct3D den neuen Befehlspuffer auffüllt. Treiber, die das Multibuffering von Befehlspuffern nicht unterstützen, können dieses Flag ignorieren. Dieses Flag wird nur von Direct3D festgelegt.
D3DHALDP2_SWAPVERTEXBUFFER Der Treiber kann den Puffer, auf den lpDDVertex oder lpVertices zeigt, durch einen neuen Vertexpuffer austauschen und sofort zurückgeben, wobei der ursprüngliche Puffer asynchron verarbeitet wird, während Direct3D den neuen Vertexpuffer auffüllt. Treiber, die das Multibuffering von Vertexpuffern nicht unterstützen, können dieses Flag ignorieren. Dieses Flag wird nur von Direct3D festgelegt.
D3DHALDP2_USERMEMVERTICES Der lpVertices-Member ist gültig, sodass der Treiber die Scheitelpunktdaten aus dem vom Benutzer zugewiesenen Speicher abrufen sollte, auf den lpVertices verweist. Dieses Flag wird nur von Direct3D festgelegt.
D3DHALDP2_VIDMEMCOMMANDBUF Der vom Treiber als Swappuffer zugewiesene Befehlspuffer befindet sich nicht im Systemspeicher. Dieses Flag kann von Treibern festgelegt werden, die das Multibuffering von Befehlspuffern unterstützen.
D3DHALDP2_VIDMEMVERTEXBUF Der vom Treiber als Swappuffer zugeordnete Vertexpuffer befindet sich nicht im Systemspeicher. Dieses Flag kann von Treibern festgelegt werden, die das Multibuffering von Vertexpuffern unterstützen.

dwVertexType

Identifiziert die FVF der Daten im Vertexpuffer; DwVertexType gibt also an, welche Datenfelder pro Vertex im Vertexpuffer vorhanden sind, auf den lpDDVertex oder lpVertices zeigt. Dieser Member kann ein bitweises OR der Werte in der folgenden Tabelle sein. Es ist nur eines der D3DFVF_TEXx-Flags festgelegt.

Wert Bedeutung
D3DFVF_DIFFUSE Jeder Scheitelpunkt hat eine diffuse Farbe.
D3DFVF_SPECULAR Jeder Scheitelpunkt hat eine Glanzfarbe.
D3DFVF_TEX0 Mit den Vertexdaten werden keine Texturkoordinaten bereitgestellt.
D3DFVF_TEX1 Jeder Scheitelpunkt verfügt über einen Satz von Texturkoordinaten.
D3DFVF_TEX2 Jeder Scheitelpunkt verfügt über zwei Sätze von Texturkoordinaten.
D3DFVF_TEX3 Jeder Scheitelpunkt verfügt über drei Sätze von Texturkoordinaten.
D3DFVF_TEX4 Jeder Scheitelpunkt verfügt über vier Sätze von Texturkoordinaten.
D3DFVF_TEX5 Jeder Scheitelpunkt verfügt über fünf Sätze von Texturkoordinaten.
D3DFVF_TEX6 Jeder Scheitelpunkt verfügt über sechs Sätze von Texturkoordinaten.
D3DFVF_TEX7 Jeder Scheitelpunkt verfügt über sieben Sätze von Texturkoordinaten.
D3DFVF_TEX8 Jeder Scheitelpunkt verfügt über acht Sätze von Texturkoordinaten.
D3DFVF_XYZRHW Jeder Scheitelpunkt verfügt über x-, y-, z- und w-Koordinaten. Dieses Flag wird immer festgelegt.

lpDDCommands

dwCommandOffset

dwCommandLength

Gibt die Anzahl der Bytes gültiger Befehlsdaten auf der Oberfläche an, auf die lpDDCommands ab dwCommandOffset zeigt.

lpDDVertex

Verweist auf die DD_SURFACE_LOCAL-Struktur , die die DirectDraw-Oberfläche mit den Vertexdaten identifiziert, wenn das flag D3DHALDP2_USERMEMVERTICES in dwFlags nicht festgelegt ist. Bildet eine Vereinigung mit lpVertices.

lpVertices

Verweist auf einen Speicherblock im Benutzermodus, der Scheitelpunktdaten enthält, wenn das flag D3DHALDP2_USERMEMVERTICES in dwFlags festgelegt ist.

dwVertexOffset

Gibt die Anzahl von Bytes in die Oberfläche an, auf die von lpDDVertex oder lpVertices verwiesen wird , auf die die Vertexdaten beginnen.

dwVertexLength

Gibt die Anzahl von Scheitelpunkten an, für die gültige Daten auf der Oberfläche vorhanden sind, auf die von lpDDVertex oder lpVertices verwiesen wird. Diese gültigen Daten beginnen bei dwVertexOffset.

dwReqVertexBufSize

Gibt die Mindestanzahl von Bytes an, die der Treiber für den Swap-Vertexpuffer zuordnen muss. Dieser Member ist nur gültig, wenn das flag D3DHALDP2_REQVERTEXBUFSIZE festgelegt ist. Treiber, die das Multibuffering von Vertexpuffern nicht unterstützen, sollten diesen Member ignorieren.

dwReqCommandBufSize

Gibt die Mindestanzahl von Bytes an, um die der Treiber den Swapbefehlspuffer erhöhen muss. Dieser Member ist nur gültig, wenn das flag D3DHALDP2_REQCOMMANDBUFSIZE festgelegt ist. Treiber, die das Multibuffering von Befehlspuffern nicht unterstützen, sollten diesen Member ignorieren.

lpdwRStates

Verweist auf ein Renderzustandsarray, das der Treiber aktualisieren soll, wenn er Renderzustandsbefehle aus dem Befehlspuffer analysiert. Der Treiber sollte dieses Array nur aktualisieren, wenn das flag D3DHALDP2_EXECUTEBUFFER in dwFlags festgelegt ist. Der Treiber sollte die D3DRENDERSTATETYPE aufgezählten Typen verwenden, um das entsprechende Element des Renderzustandsarrays zu aktualisieren.

dwVertexSize

Gibt die Größe der einzelnen Scheitelpunkte in Bytes an. Dieses Element bildet eine Union mit ddrval.

ddrval

Gibt den Speicherort an, an dem der Treiber den Rückgabewert von D3dDrawPrimitives2 schreibt. D3D_OK gibt den Erfolg an. Andernfalls sollte der Treiber den entsprechenden D3DERR_Xxx-Fehlercode zurückgeben. Weitere Informationen finden Sie unter Rückgabecodes für Direct3D-Treiberrückrufe.

Wert Bedeutung
D3D_OK Der Vorgang wurde erfolgreich abgeschlossen.
D3DERR_COMMAND_UNPARSED Der Treiber erfordert die Direct3D-Runtime, um den Ausführungspuffer zu analysieren.

dwErrorOffset

Auf jede D3DHAL_DP2RESPONSEQUERY folgen die folgenden Daten im Zusammenhang mit der Abfrage:

  • BOOL für D3DQUERYTYPE_EVENT
  • DWORD für D3DQUERYTYPE_OCCLUSION
  • D3DDEVINFO_VCACHE Struktur für D3DQUERYTYPE_VCACHE

Hinweise

Beachten Sie, dass der dwVertexOffset-Member Werte in Bytes angibt. das dwVertexLength-Element gibt Werte in Scheitelpunkten an.

Um die gültigen Daten in Bytes zu berechnen, die auf der Oberfläche bei lpDDVertex oder lpVertices vorhanden sind, multiplizieren Sie den Wert in dwVertexLength mit dem Wert in dwVertexSize.

Anforderungen

Anforderung Wert
Header d3dhal.h (include D3dhal.h)

Weitere Informationen

D3DHAL_DP2COMMAND

D3DRENDERSTATETYPE

D3dDrawPrimitives2

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL