PFND3DDDI_DRAWRECTPATCH Rückruffunktion (d3dumddi.h)

Die DrawRectPatch-Funktion zeichnet einen neuen oder zwischengespeicherten rechteckigen Patch oder aktualisiert die Spezifikation eines zuvor definierten Patches.

Syntax

PFND3DDDI_DRAWRECTPATCH Pfnd3dddiDrawrectpatch;

HRESULT Pfnd3dddiDrawrectpatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWRECTPATCH *unnamedParam2,
       const D3DDDIRECTPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

Parameter

[in] hDevice

Ein Handle für das Anzeigegerät (Grafikkontext).

unnamedParam2

pData [in]

Ein Zeiger auf eine D3DDDIARG_DRAWRECTPATCH Struktur, die den zu zeichnenden rechteckigen Patch beschreibt.

unnamedParam3

pInfo [in]

Optional. Ein Zeiger auf eine D3DDDIRECTPATCH_INFO Struktur, die Informationen zum rechteckigen Patch beschreibt.

unnamedParam4

pPatch [in]

Optional. Ein Zeiger auf einen Puffer, der vier Gleitkommawerte (D3DFLOAT[4]) enthält, die die Segmentanzahl für jeden der vier Kanten des rechteckigen Patches bereitstellen.

Rückgabewert

DrawRectPatch gibt S_OK oder ein entsprechendes Fehlerergebnis zurück, wenn der rechteckige Patch nicht erfolgreich gezeichnet wurde.

Hinweise

Wenn die Microsoft Direct3D-RuntimepPatch die DrawRectPatch-Funktion des Benutzermodus-Anzeigetreibers aufruft, kann sie optional Informationen in der pInfo und den Parametern bereitstellen. Die Laufzeit legt Flags im Flags-Member der D3DDDIARG_DRAWRECTPATCH-Struktur fest, die von pData angegeben wird, um anzugeben, ob diese optionalen Informationen bereitgestellt werden.

Die Runtime stellt einen UINT-Wert im Handle-Member von D3DDDIARG_DRAWRECTPATCH bereit, um auf die Patchoberfläche zu verweisen. Wenn die Runtime die Patchoberfläche neu zeichnet, übergibt sie den Wert des Patchhandles und ist nicht erforderlich, um die D3DDDIRECTPATCH_INFO Datenstruktur für die Patchoberfläche erneut anzugeben. Der Benutzermodusanzeigetreiber kann Vorwärtsdifferenzkoeffizienten und alle anderen Informationen vorkonfigurieren und zwischenspeichern. Daher werden nachfolgende Aufrufe der DrawRectPatch-Funktion des Treibers, die denselben Patchhandlewert verwenden, effizienter ausgeführt.

Der tatsächliche Wert in Handle wird von der Anwendung bestimmt und steht nicht unter Laufzeitsteuerung. Daher muss der Treiber jeden Wert verarbeiten, der von einem UINT angegeben werden kann.

Der spezielle Handle-Wert 0 gibt an, dass der Patch dynamisch ist. Daher kann der Treiber keine Informationen für den Patch vorkonfigurieren oder zwischenspeichern. Ein nichtzero-Wert für Handle gibt an, dass der Patch statisch ist (oder mit niedriger Häufigkeit aktualisiert wird). Daher kann der Treiber Informationen für den Patch vorkonfigurieren und zwischenspeichern.

Der Treiber muss die folgenden Szenarien in seiner DrawRectPatch-Funktion behandeln:

  • Wenn das Handle-Element 0 ist, ist der Patch dynamisch. Der Treiber sollte weder Informationen für den Patch vorkompilieren noch zwischenspeichern. In dieser Situation übergibt die Runtime einen Zeiger an eine D3DDDIRECTPATCH_INFO-Struktur im pInfo-Parameter und legt das RTPATCHFLAG_HASINFO-Flag im Flags-Member der D3DDDIARG_DRAWRECTPATCH-Struktur fest, um das Vorhandensein der D3DDDIRECTPATCH_INFO-Struktur in pInfo anzugeben. Optional kann die Runtime auch das RTPATCHFLAG_HASSEGS-Flag in Flags festlegen, um das Vorhandensein der Segmentinformationen anzugeben, die durch den pPatch-Parameter angegeben werden. Wenn die Runtime jedoch keine Segmentinformationen bei pPatch angibt, sollte die Runtime stattdessen den D3DRS_PATCHSEGMENTS Renderzustandswert verwenden.
  • Wenn in einem früheren Aufruf der DrawRectPatch-Funktion des Treibers noch kein Wert für nichtzero Handle angegeben wurde, zeichnet die Runtime einen neuen zwischenspeicherbaren Patch. Der Treiber sollte Arbeitsspeicher zum Speichern zwischengespeicherter Daten zuweisen und diese Daten seiner Patchhandle-Tabelle hinzufügen. Da die Runtime diesen Patch zuvor nicht gezeichnet hat, sollte die Runtime das RTPATCHFLAG_HASINFO-Flag festlegen und einen Zeiger auf eine D3DDDIRECTPATCH_INFO Struktur im pInfo-Parameter übergeben. Der Treiber muss überprüfen, ob das flag RTPATCHFLAG_HASINFO vorhanden ist, um das Vorhandensein der Patchinformationen zu überprüfen. Wenn keine Patchinformationen angegeben werden, sollte der Treiber den DrawRectPatch-Aufruf ignorieren und keinen Speicher für zwischengespeicherte Daten in seiner Patchhandle-Tabelle zuweisen. Optional kann die Runtime das RTPATCHFLAG_HASSEGS-Flag festlegen, um das Vorhandensein der Segmentinformationen anzugeben. Wenn die Runtime jedoch keine Segmentinformationen bei pPatch angibt, sollte die Runtime stattdessen den D3DRS_PATCHSEGMENTS Renderzustandswert verwenden.
  • Wenn zuvor in einem früheren Aufruf der DrawRectPatch-Funktion des Treibers ein Wert für nichtzero Handle angegeben wurde und das RTPATCHFLAG_HASINFO-Flag festgelegt ist, aktualisiert die Runtime die Definition für den Patch. Die Runtime übergibt einen Zeiger auf eine D3DDDIRECTPATCH_INFO-Struktur im pInfo-Parameter , und der Treiber muss die Patchinformationen neu kompensieren und neu zwischenspeichern. Optional kann die Runtime das RTPATCHFLAG_HASSEGS-Flag festlegen, um das Vorhandensein der Segmentinformationen anzugeben. Wenn die Runtime jedoch keine Segmentinformationen bei pPatch angibt, sollte die Runtime stattdessen den D3DRS_PATCHSEGMENTS Renderzustandswert verwenden.
  • Wenn in einem früheren Aufruf der DrawRectPatch-Funktion des Treibers zuvor ein Wert für nonzero Handle angegeben wurde und das RTPATCHFLAG_HASINFO-Flag nicht festgelegt ist, wird der Patch von der Runtime neu gezeichnet. Der Treiber sollte die zwischengespeicherten Informationen verwenden, um den Patch zu zeichnen. In dieser Situation ignoriert der Treiber die aktuellen Vertexstreams, und stattdessen werden die zwischengespeicherten Informationen verwendet. Die Runtime kann jedoch weiterhin neue Segmentinformationen angeben. Daher sollte der Treiber nach dem RTPATCHFLAG_HASSEGS Flag suchen und die angegebenen Segmentinformationen verarbeiten, auch wenn er einen zwischengespeicherten Patch verwendet.
Der Treiber erhält eine Benachrichtigung, dass zwischengespeicherte Patchinformationen über den D3DRS_DELETERTPATCH Renderzustand freigegeben werden. Der Wert dieses Renderzustands ist der zu löschende Patch.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Desktop
Kopfzeile d3dumddi.h (include D3dumddi.h)

Weitere Informationen

D3DDDIARG_DRAWRECTPATCH

D3DDDI_DEVICEFUNCS