PFND3DDDI_DRAWTRIPATCH Rückruffunktion (d3dumddi.h)
Die DrawTriPatch-Funktion zeichnet einen neuen oder zwischengespeicherten dreieckigen Patch oder aktualisiert die Spezifikation eines zuvor definierten Patches.
Syntax
PFND3DDDI_DRAWTRIPATCH Pfnd3dddiDrawtripatch;
HRESULT Pfnd3dddiDrawtripatch(
[in] HANDLE hDevice,
const D3DDDIARG_DRAWTRIPATCH *unnamedParam2,
const D3DDDITRIPATCH_INFO *unnamedParam3,
const FLOAT *unnamedParam4
)
{...}
Parameter
[in] hDevice
Ein Handle für das Anzeigegerät (Grafikkontext).
unnamedParam2
pData [in]
Ein Zeiger auf eine D3DDDIARG_DRAWTRIPATCH Struktur, die den zu zeichnenden dreieckigen Patch beschreibt.
unnamedParam3
pInfo [in]
Optional. Ein Zeiger auf eine D3DDDITRIPATCH_INFO Struktur, die Informationen zum dreieckigen Patch beschreibt.
unnamedParam4
pPatch [in]
Optional. Ein Zeiger auf einen Puffer, der drei Gleitkommawerte (D3DFLOAT[3]) enthält, die die Segmentanzahl für jeden der drei Kanten des dreieckigen Patches bereitstellen.
Rückgabewert
DrawTriPatch gibt S_OK oder ein entsprechendes Fehlerergebnis zurück, wenn der dreieckige Patch nicht erfolgreich gezeichnet wurde.
Hinweise
Wenn die Microsoft Direct3D-Runtime die DrawTriPatch-Funktion des Benutzermodusanzeigetreibers aufruft, kann sie optional Informationen in den Parametern pInfo und pPatch bereitstellen. Die Laufzeit legt Flags im Flags-Member der D3DDDIARG_DRAWTRIPATCH-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_DRAWTRIPATCH 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 D3DDDITRIPATCH_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 DrawTriPatch-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 DrawTriPatch-Funktion verarbeiten:
- 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 D3DDDITRIPATCH_INFO-Struktur im pInfo-Parameter und legt das RTPATCHFLAG_HASINFO-Flag im Flags-Member der D3DDDIARG_DRAWTRIPATCH-Struktur fest, um das Vorhandensein der D3DDDITRIPATCH_INFO-Struktur bei pInfo anzugeben. Optional kann die Runtime auch das RTPATCHFLAG_HASSEGS-Flag in Flags festlegen, um das Vorhandensein der Segmentinformationen anzugeben, die für den pPatch-Parameter angegeben sind. 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 DrawTriPatch-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 sind, sollte der Treiber den DrawTriPatch-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 DrawTriPatch-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 D3DDDITRIPATCH_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 zuvor in einem früheren Aufruf der DrawTriPatch-Funktion des Treibers ein Wert für nichtzero 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.
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) |