D3DHAL_DP2DRAWTRIPATCH Struktur (d3dhal.h)
Nur DirectX 8.0 und höhere Versionen.
D3DHAL_DRAWTRIPATCH vom D3dDrawPrimitives2-Rückruf aus dem Befehlspuffer analysiert wird, 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;
Member
Handle
Gibt den Handle an, der der Oberfläche zugeordnet ist.
Flags
Gibt an, welche zusätzlichen Informationen der D3DHAL_DP2DRAWTRIPATCH Datenstruktur im DP2-Stream folgen, falls vorhanden.
Hinweise
Das Handle-Element wird verwendet, um die Oberfläche einem Griff zuzuordnen, sodass beim nächsten Zeichnen dieser Oberfläche die D3DTRIPATCH_INFO Datenstruktur für diesen Patch nicht neu angegeben werden muss. Dies ermöglicht es dem Treiber, Vorwärtsdifferenzkoeffizienten und/oder andere Informationen vorzurechnen und zwischenzuspeichern, sodass 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 steht nicht unter Laufzeitsteuerung. Daher sollte der Treiber bereit sein, mit jedem durch ein DWORD bespezifizierbaren Wert fertig zu werden. Der spezielle Handle-Wert 0 bedeutet, dass der Patch dynamisch ist und keine Vorberechnungs- oder Zwischenspeicherungsinformationen für diesen Patch vorhanden sind. Ein Unterzerowert für Handle bedeutet, dass der Patch statisch (oder mit niedriger Häufigkeit aktualisiert) ist und eine Vorberechnung und Zwischenspeicherung möglich sind.
Das Flags-Element wird verwendet, um zu kommunizieren, welche zusätzlichen Informationen der D3DHAL_DP2DRAWTRIPATCH Datenstruktur im DP2-Stream folgen. Wenn RTPATCHFLAG_HASSEGS angegeben wird, folgen drei Gleitkommawerte im DP2-Stream D3DHAL_DP2DRAWTRIPATCH. Diese Floats geben die Segmentanzahl für jeden der drei Kanten des dreieckigen Patches an und überschreiben den Wert des Renderzustands D3DRS_PATCHSEGMENTS. Wenn RTPATCHFLAG_HASINFO angegeben wird, folgt eine D3DTRIPATCH_INFO Datenstruktur im DP2-Stream. Wenn beide Flags angegeben werden, folgen die drei Floats, die die Segmentanzahl angeben, D3DHAL_DP2DRAWTRIPATCH, und die D3DTRIPATCH_INFO Struktur folgt den Gleitkommawerten.
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 Vorberechnung oder Zwischenspeicherung durchgeführt werden. In diesem Fall folgt ein D3DTRIPATCH_INFO D3DHAL_DP2DRAWTRIPATCH im DP2-Stream (und das Flag RTPATCHFLAG_HASINFO wird festgelegt, um das Vorhandensein der D3DTRIPATCH_INFO Datenstruktur anzuzeigen). Optional können RTPATCHFLAG_HASSEGS auch so festgelegt werden, dass die Segmentinformationen vorhanden sind. Wenn dies jedoch weggelassen wird, sollte stattdessen der Wert des Renderzustands D3DRS_PATCHSEGMENTS verwendet werden.
Wenn Handle subzero ist und der Handle-Wert nicht von einem früheren D3DDP2OP_DRAWTRIPATCH angegeben wurde, gibt dies an, dass ein neuer zwischenspeicherbarer Patch gezeichnet wird. Der Treiber sollte Arbeitsspeicher zuweisen, um zwischengespeicherte Daten zu speichern, und diese Daten der Patchhandle-Tabelle hinzufügen. Da dieser Patch noch nicht angezeigt wurde, sollte das RTPATCHFLAG_HASINFO-Flag festgelegt werden, und eine D3DTRIPATCH_INFO Struktur sollte im DP2-Stream folgen. Die Runtime garantiert dies jedoch nicht, und der Treiber sollte das Vorhandensein der Patchinformationen überprüfen, indem er das Flag testet. Wenn keine Informationen angegeben werden, sollte dieses Token ignoriert werden, und es sollte kein Handle in der Patchhandletabelle des Treibers zugewiesen werden. Optional können RTPATCHFLAG_HASSEGS auch so festgelegt werden, dass die Segmentinformationen vorhanden sind. Wenn dies jedoch weggelassen wird, sollte stattdessen der Wert des Renderzustands D3DRS_PATCHSEGMENTS verwendet werden.
Wenn Handle subzero ist, wurde der Handle-Wert von einem früheren D3DDP2OP_DRAWTRIPATCH Token angegeben, und das Feld Flags enthält RTPATCHFLAG_HASINFO, dann wird die Definition für den Patch aktualisiert. Im DP2-Stream folgt eine D3DTRIPATCH_INFO Datenstruktur, die der Treiber verwenden sollte, um Patchinformationen neu zu berechnen und neu zwischenzuspeichern. Optional können RTPATCHFLAG_HASSEGS auch so festgelegt werden, dass die Segmentinformationen vorhanden sind. Wenn dies jedoch weggelassen wird, sollte stattdessen der Wert des Renderzustands D3DRS_PATCHSEGMENTS verwendet werden.
Wenn Handle subzero ist, der Handle-Wert von einem früheren D3DDP2OP_DRAWTRIPATCH Token angegeben wurde und das Feld Flags keine RTPATCHFLAG_HASINFO enthält, sollten die zwischengespeicherten Informationen zum Zeichnen des Patches verwendet werden. In diesem Fall werden die aktuellen Scheitelpunkte ignoriert. Stattdessen sollten die zwischengespeicherten Informationen verwendet werden. Allerdings ist es in diesem Fall weiterhin möglich, dass eine neue Segmentinformation angegeben wird. Daher sollte der Treiber nach dem Flag suchen, RTPATCHFLAG_HASSEGS und die angegebenen Segmentinformationen verarbeiten, 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) |
Weitere Informationen
D3DDP2OP_DRAWTRIPATCH
D3DRS_DELETERTPATCH