Freigeben über


D3DHAL_DP2DRAWTRIPATCH Struktur (d3dhal.h)

Nur DirectX 8.0 und höhere Versionen.

D3DHAL_DRAWTRIPATCH wird vom Befehlspuffer vom D3dDrawPrimitives2 Rückruf analysiert, wenn das bCommand-Element der D3DHAL_DP2COMMAND Struktur auf D3DDP2OP_DRAWTRIPATCH festgelegt ist und zum Rendern eines dreieckigen Patches verwendet wird.

Syntax

typedef struct _D3DHAL_DP2DRAWTRIPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWTRIPATCH;

Angehörige

Handle

Gibt den Ziehpunkt an, der der Oberfläche zugeordnet ist.

Flags

Gibt an, was ggf. zusätzliche Informationen der D3DHAL_DP2DRAWTRIPATCH Datenstruktur im DP2-Datenstrom folgen.

Bemerkungen

Das Handle Member wird verwendet, um die Oberfläche einem Ziehpunkt zuzuordnen, sodass beim nächsten Zeichnen dieser Oberfläche keine Angabe der D3DTRIPATCH_INFO Datenstruktur für diesen Patch erforderlich ist. Dies ermöglicht es dem Treiber, Vorwärtsdifferenzkoeffizienten und/oder andere Informationen vorab zu komppilieren und zwischenzuspeichern, wodurch wiederum nachfolgende D3DDP2OP_DRAWTRIPATCH Token mit demselben Handle effizienter ausgeführt werden können. D3DTRIPATCH_INFO wird in der neuesten DirectX SDK-Dokumentation beschrieben.

Der tatsächliche Wert von Handle wird von der Anwendung bestimmt und ist nicht unter Laufzeitsteuerelement. Daher sollte der Fahrer bereit sein, mit jedem von einem DWORD angegebenen Wert fertig zu sein. Der spezielle Handlewert null bedeutet, dass der Patch dynamisch ist und keine Informationen zum Vorabcomputieren oder Zwischenspeichern für diesen Patch vorhanden sind. Ein Unterzero-Wert für Handle bedeutet, dass der Patch statisch (oder mit niedriger Häufigkeit aktualisiert) ist und Vorkompilierung und Zwischenspeicherung möglich sind.

Das Flags Members wird verwendet, um zu kommunizieren, was, falls vorhanden, zusätzliche Informationen der D3DHAL_DP2DRAWTRIPATCH Datenstruktur im DP2-Datenstrom folgen. Wenn RTPATCHFLAG_HASSEGS angegeben wird, folgen drei Gleitkommawerte D3DHAL_DP2DRAWTRIPATCH im DP2-Datenstrom. Diese Floats geben den Segmentanzahlen für jeden der drei Kanten des dreieckigen Patches und überschreiben den Wert des Renderzustands D3DRS_PATCHSEGMENTS. Wenn RTPATCHFLAG_HASINFO angegeben wird, folgt im DP2-Datenstrom eine D3DTRIPATCH_INFO Datenstruktur. Wenn beide Flags angegeben werden, folgen die drei Floats, die Segmentanzahl angeben, D3DHAL_DP2DRAWTRIPATCH und die D3DTRIPATCH_INFO Struktur den Gleitkommawerten folgt.

Es gibt vier Szenarien, die ein Treiber beim Verarbeiten von D3DDP2OP_DRAWTRIPATCH verarbeiten muss.

Wenn Handle null ist, ist der Patch dynamisch und es sollte keine Vorkompilierung oder Zwischenspeicherung ausgeführt werden. In diesem Fall folgt ein D3DTRIPATCH_INFO D3DHAL_DP2DRAWTRIPATCH im DP2-Datenstrom (und das Kennzeichen, das RTPATCHFLAG_HASINFO festgelegt ist, um das Vorhandensein der D3DTRIPATCH_INFO Datenstruktur anzugeben). Optional kann RTPATCHFLAG_HASSEGS festgelegt werden, um das Vorhandensein der Segmentinformationen anzugeben. Wenn dies jedoch nicht angegeben wird, sollte stattdessen der Wert des Renderzustands D3DRS_PATCHSEGMENTS verwendet werden.

Wenn Handle subzero ist und der Handlewert nicht von einem früheren D3DDP2OP_DRAWTRIPATCH angegeben wurde, gibt dies an, dass ein neuer zwischenspeicherbarer Patch gezeichnet wird. Der Treiber sollte Speicher zuweisen, um zwischengespeicherte Daten zu speichern und diese Daten der Patchhandle-Tabelle hinzuzufügen. Da dieser Patch noch nicht gesehen wurde, sollte das RTPATCHFLAG_HASINFO Flag festgelegt werden, und eine D3DTRIPATCH_INFO Struktur sollte im DP2-Datenstrom folgen. Die Laufzeit garantiert dies jedoch nicht, und der Treiber sollte das Vorhandensein der Patchinformationen überprüfen, indem das Flag getestet wird. Wenn keine Informationen angegeben werden, sollte dieses Token ignoriert werden und kein Handle in der Patchhandle-Tabelle des Treibers zugewiesen werden. Optional kann RTPATCHFLAG_HASSEGS festgelegt werden, um das Vorhandensein der Segmentinformationen anzugeben. Wenn dies jedoch nicht angegeben wird, sollte stattdessen der Wert des Renderzustands D3DRS_PATCHSEGMENTS verwendet werden.

Wenn Handle subzero ist, wurde der Handlewert durch ein früheres D3DDP2OP_DRAWTRIPATCH-Token angegeben, und das feld Flags enthält RTPATCHFLAG_HASINFO, wird die Definition für den Patch aktualisiert. Eine D3DTRIPATCH_INFO Datenstruktur folgt im DP2-Datenstrom, und der Treiber sollte diese zum Neukompilieren und Erneutes Zwischenspeichern von Patchinformationen verwenden. Optional kann RTPATCHFLAG_HASSEGS festgelegt werden, um das Vorhandensein der Segmentinformationen anzugeben. Wenn dies jedoch nicht angegeben wird, sollte stattdessen der Wert des Renderzustands D3DRS_PATCHSEGMENTS verwendet werden.

Wenn Handle subzero ist, wurde der Handlewert durch ein früheres D3DDP2OP_DRAWTRIPATCH-Token angegeben, und das feld Flags enthält keine RTPATCHFLAG_HASINFO, dann sollten die zwischengespeicherten Informationen zum Zeichnen des Patches verwendet werden. In diesem Fall werden die aktuellen Vertexdatenströme ignoriert; Stattdessen sollten die zwischengespeicherten Informationen verwendet werden. In diesem Fall ist es jedoch weiterhin möglich, dass neue Segmentinformationen angegeben werden können. Daher sollte der Treiber die Kennzeichnung RTPATCHFLAG_HASSEGS überprüfen und angegebene Segmentinformationen behandeln, auch wenn ein zwischengespeicherter Patch verwendet wird.

Der Treiber erhält eine Benachrichtigung, dass zwischengespeicherte Patchinformationen über den Renderzustand D3DRS_DELETERTPATCH freigegeben werden. Der Wert dieses Renderzustands ist der zu löschende Patch.

Anforderungen

Anforderung Wert
Header- d3dhal.h (einschließlich D3dhal.h)

Siehe auch

D3DDP2OP_DRAWTRIPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWRECTPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2