PFND3DDDI_DRAWTRIPATCH funzione di callback (d3dumddi.h)

La funzione DrawTriPatch disegna una patch triangolare nuova o memorizzata nella cache o aggiorna la specifica di una patch definita in precedenza.

Sintassi

PFND3DDDI_DRAWTRIPATCH Pfnd3dddiDrawtripatch;

HRESULT Pfnd3dddiDrawtripatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWTRIPATCH *unnamedParam2,
       const D3DDDITRIPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

Parametri

[in] hDevice

Handle per il dispositivo di visualizzazione (contesto grafico).

unnamedParam2

pData [in]

Puntatore a una struttura D3DDDIARG_DRAWTRIPATCH che descrive la patch triangolare da disegnare.

unnamedParam3

pInfo [in]

facoltativo. Puntatore a una struttura D3DDDITRIPATCH_INFO che descrive le informazioni sulla patch triangolare.

unnamedParam4

pPatch [in]

facoltativo. Puntatore a un buffer contenente tre valori a virgola mobile (D3DFLOAT[3]) che forniscono il conteggio dei segmenti per ognuno dei tre bordi della patch triangolare.

Valore restituito

DrawTriPatch restituisce S_OK o un risultato di errore appropriato se la patch triangolare non viene disegnata correttamente.

Commenti

Quando il runtime di Microsoft Direct3D chiama la funzione DrawTriPatch del driver di visualizzazione in modalità utente, può fornire facoltativamente informazioni nei parametri pInfo e pPatch. Il runtime imposta i flag nel membro Flag della struttura D3DDDIARG_DRAWTRIPATCH specificata da pData per indicare se fornisce queste informazioni facoltative.

Il runtime fornisce un valore UINT nel membro Handle di D3DDDIARG_DRAWTRIPATCH per fare riferimento alla superficie di patch. Ogni volta che il runtime ridisegna l'area di patch, passa il valore dell'handle patch e non è necessario specificare nuovamente la struttura di dati D3DDDITRIPATCH_INFO per la superficie di patch. Il driver di visualizzazione in modalità utente può precomputare e memorizzare nella cache coefficienti di differenza di inoltro e qualsiasi altra informazione. Pertanto, le chiamate successive alla funzione DrawTriPatch del driver che usano lo stesso valore di handle patch vengono eseguite in modo più efficiente.

Il valore effettivo in Handle è determinato dall'applicazione e non è sotto il controllo di runtime. Pertanto, il driver deve gestire qualsiasi valore che può essere specificato da un UINT.

Il valore handle speciale pari a zero indica che la patch è dinamica; pertanto, il driver non può precomputare o memorizzare nella cache le informazioni per la patch. Un valore diverso da zero per Handle indica che la patch è statica (o aggiornata con bassa frequenza); pertanto, il driver può precomputere e memorizzare nella cache le informazioni per la patch.

Il driver deve gestire gli scenari seguenti nella funzione DrawTriPatch :

  • Se il membro Handle è zero, la patch è dinamica. Il driver non deve né precompute né memorizzare nella cache le informazioni per la patch. In questa situazione, il runtime passa un puntatore a una struttura D3DDDITRIPATCH_INFO nel parametro pInfo e imposta il flag RTPATCHFLAG_HASINFO nel membro Flag della struttura D3DDDIARG_DRAWTRIPATCH per indicare la presenza della struttura D3DDDITRIPATCH_INFO in pInfo. Facoltativamente, il runtime può anche impostare il flag RTPATCHFLAG_HASSEGS in Flag per indicare la presenza delle informazioni del segmento specificate dal parametro pPatch . Tuttavia, se il runtime non fornisce informazioni di segmento in pPatch, il runtime deve invece usare il valore dello stato di rendering D3DRS_PATCHSEGMENTS.
  • Se un valore handle diverso da zero non è stato specificato in precedenza in una chiamata precedente alla funzione DrawTriPatch del driver, il runtime disegna una nuova patch memorizzata nella cache. Il driver deve allocare memoria per archiviare i dati memorizzati nella cache e deve aggiungere questi dati alla tabella di gestione delle patch. Poiché il runtime non ha precedentemente disegnato questa patch, il runtime deve impostare il flag RTPATCHFLAG_HASINFO e passare un puntatore a una struttura D3DDDIRECTPATCH_INFO nel parametro pInfo . Il driver deve verificare la presenza delle informazioni sulla patch RTPATCHFLAG_HASINFO flag. Se non vengono specificate informazioni sulle patch, il driver deve ignorare la chiamata DrawTriPatch e non deve allocare memoria per i dati memorizzati nella cache nella tabella di handle patch. Facoltativamente, il runtime può impostare il flag di RTPATCHFLAG_HASSEGS per indicare la presenza delle informazioni del segmento. Tuttavia, se il runtime non fornisce informazioni di segmento in pPatch, il runtime deve invece usare il valore dello stato di rendering D3DRS_PATCHSEGMENTS.
  • Se in precedenza è stato specificato un valore handle diverso da zero in una chiamata precedente alla funzione DrawTriPatch del driver e il flag di RTPATCHFLAG_HASINFO viene impostato, il runtime aggiorna la definizione per la patch. Il runtime passa un puntatore a una struttura D3DDDITRIPATCH_INFO nel parametro pInfo e il driver deve ricompilare e ricompilare le informazioni sulla patch. Facoltativamente, il runtime può impostare il flag di RTPATCHFLAG_HASSEGS per indicare la presenza delle informazioni del segmento. Tuttavia, se il runtime non fornisce informazioni di segmento in pPatch, il runtime deve invece usare il valore dello stato di rendering D3DRS_PATCHSEGMENTS.
  • Se in precedenza è stato specificato un valore handle diverso da zero in una chiamata precedente alla funzione DrawTriPatch del driver e il flag di RTPATCHFLAG_HASINFO non è impostato, il runtime ridisegna la patch. Il driver deve usare le informazioni memorizzate nella cache per disegnare la patch. In questa situazione, il driver ignora i flussi di vertice correnti e le informazioni memorizzate nella cache vengono usate invece. Tuttavia, il runtime può ancora specificare nuove informazioni di segmento; pertanto, il driver deve verificare la presenza del flag RTPATCHFLAG_HASSEGS e gestire le informazioni di segmento specificate anche se usa una patch memorizzata nella cache.
Il driver riceve una notifica per rilasciare informazioni sulle patch memorizzate nella cache tramite lo stato di rendering D3DRS_DELETERTPATCH. Il valore di questo stato di rendering è la patch da eliminare.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Desktop
Intestazione d3dumddi.h (include D3dumddi.h)

Vedi anche

D3DDDIARG_DRAWTRIPATCH

D3DDDI_DEVICEFUNCS