Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Solo DirectX 8.0 e versioni successive.
D3DHAL_DRAWTRIPATCH viene analizzato dal buffer dei comandi dal D3dDrawPrimitives2 callback quando il membro della struttura D3DHAL_DP2COMMAND bCommand viene impostato su D3DDP2OP_DRAWTRIPATCH e viene usato per eseguire il rendering di una patch triangolare.
Sintassi
typedef struct _D3DHAL_DP2DRAWTRIPATCH {
DWORD Handle;
DWORD Flags;
} D3DHAL_DP2DRAWTRIPATCH;
Membri
Handle
Specifica l'handle associato alla superficie.
Flags
Specifica cosa, se presente, informazioni aggiuntive seguono la struttura dei dati D3DHAL_DP2DRAWTRIPATCH nel flusso DP2.
Osservazioni
Il membro handle viene utilizzato per associare la superficie a un handle, in modo che la volta successiva che questa superficie venga disegnata non è necessario specificare la struttura dei dati D3DTRIPATCH_INFO per questa patch. Ciò consente al driver di precomputare e memorizzare nella cache i coefficienti di differenza in avanti e/o qualsiasi altra informazione, che a sua volta consente ai token di D3DDP2OP_DRAWTRIPATCH successivi di usare lo stesso handle per eseguire in modo più efficiente. D3DTRIPATCH_INFO è descritto nella documentazione più recente di DirectX SDK.
Il valore effettivo di Handle è determinato dall'applicazione e non è sotto il controllo di runtime. Pertanto, il driver deve essere preparato a far fronte a qualsiasi valore specificabile da una DWORD. Il valore di handle speciale pari a zero indica che la patch è dinamica e non sono presenti informazioni di precompilazione o memorizzazione nella cache per questa patch. Un valore inferiore per Handle indica che la patch è statica (o aggiornata con bassa frequenza) e la precomputazione e la memorizzazione nella cache sono possibili.
Il membro flag viene usato per comunicare cosa, se presente, le informazioni aggiuntive seguono la struttura dei dati D3DHAL_DP2DRAWTRIPATCH nel flusso DP2. Se RTPATCHFLAG_HASSEGS viene specificato, tre valori a virgola mobile seguono D3DHAL_DP2DRAWTRIPATCH nel flusso DP2. Questi float assegnano i conteggi dei segmenti per ognuno dei tre bordi della patch triangolare ed eseguono l'override del valore dello stato di rendering D3DRS_PATCHSEGMENTS. Se si specifica RTPATCHFLAG_HASINFO, nel flusso DP2 viene eseguita una struttura di dati D3DTRIPATCH_INFO. Se vengono specificati entrambi i flag, i tre valori float che specificano i conteggi dei segmenti seguono D3DHAL_DP2DRAWTRIPATCH e la struttura D3DTRIPATCH_INFO segue i valori a virgola mobile.
Esistono quattro scenari che un driver deve gestire durante l'elaborazione D3DDP2OP_DRAWTRIPATCH.
Se Handle è zero, la patch è dinamica e non deve essere eseguita alcuna precomputazione o memorizzazione nella cache. In questo caso, un D3DTRIPATCH_INFO segue D3DHAL_DP2DRAWTRIPATCH nel flusso DP2 (e il flag RTPATCHFLAG_HASINFO è impostato per indicare la presenza della struttura dei dati D3DTRIPATCH_INFO). Facoltativamente, è possibile impostare RTPATCHFLAG_HASSEGS anche per indicare la presenza delle informazioni sul segmento. Tuttavia, se questo viene omesso, è consigliabile usare il valore dello stato di rendering D3DRS_PATCHSEGMENTS.
Se handle è sottozero e il valore dell'handle non è stato specificato da un D3DDP2OP_DRAWTRIPATCH precedente, indica che viene disegnata una nuova patch memorizzabile nella cache. Il driver deve allocare memoria per archiviare i dati memorizzati nella cache e aggiungere questi dati alla relativa tabella di handle patch. Poiché questa patch non è stata vista in precedenza, il flag di RTPATCHFLAG_HASINFO deve essere impostato e una struttura D3DTRIPATCH_INFO deve essere seguita nel flusso DP2. Il runtime non garantisce questo problema, tuttavia, e il driver deve verificare la presenza delle informazioni sulla patch testando il flag. Se non viene specificata alcuna informazione, questo token deve essere ignorato e non deve essere allocato alcun handle nella tabella dell'handle patch del driver. Facoltativamente, è possibile impostare RTPATCHFLAG_HASSEGS anche per indicare la presenza delle informazioni sul segmento. Tuttavia, se questo viene omesso, è consigliabile usare il valore dello stato di rendering D3DRS_PATCHSEGMENTS.
Se handle è sottozero, il valore dell'handle è stato specificato da un token di D3DDP2OP_DRAWTRIPATCH precedente e il campo flag contiene RTPATCHFLAG_HASINFO, la definizione della patch verrà aggiornata. Una struttura dei dati D3DTRIPATCH_INFO segue nel flusso DP2 e il driver deve usarlo per ricompilare e ricompilare le informazioni sulle patch. Facoltativamente, è possibile impostare RTPATCHFLAG_HASSEGS anche per indicare la presenza delle informazioni sul segmento. Tuttavia, se questo viene omesso, è consigliabile usare il valore dello stato di rendering D3DRS_PATCHSEGMENTS.
Se handle è sottozero, il valore dell'handle è stato specificato da un token di D3DDP2OP_DRAWTRIPATCH precedente e il campo flag non contiene RTPATCHFLAG_HASINFO, le informazioni memorizzate nella cache devono essere usate per disegnare la patch. In questo caso, i flussi dei vertici correnti vengono ignorati; le informazioni memorizzate nella cache devono essere invece utilizzate. Tuttavia, in questo caso è comunque possibile specificare nuove informazioni sul segmento. Pertanto, il driver deve verificare la presenza del flag RTPATCHFLAG_HASSEGS e gestire le informazioni di segmento specificate anche se si usa una patch memorizzata nella cache.
Il driver riceve una notifica che le informazioni sulle patch memorizzate nella cache vengono rilasciate tramite lo stato di rendering D3DRS_DELETERTPATCH. Il valore di questo stato di rendering è la patch da eliminare.
Fabbisogno
| Requisito | Valore |
|---|---|
| intestazione | d3dhal.h (include D3dhal.h) |
Vedere anche
D3DDP2OP_DRAWTRIPATCH
D3DRS_DELETERTPATCH