struttura D3DHAL_DP2DRAWTRIPATCH (d3dhal.h)

Solo DirectX 8.0 e versioni successive.

D3DHAL_DRAWTRIPATCH viene analizzato dal buffer dei comandi dal callback D3dDrawPrimitives2 quando il membro bCommand della struttura D3DHAL_DP2COMMAND è 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;

Members

Handle

Specifica l'handle associato alla superficie.

Flags

Specifica cosa, se presente, le informazioni aggiuntive seguono la struttura dei dati D3DHAL_DP2DRAWTRIPATCH nel flusso DP2.

Commenti

Il membro Handle viene usato per associare la superficie a un handle, in modo che la volta successiva che questa superficie venga disegnata non sia necessario specificare di nuovo 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 l'esecuzione 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 un DWORD. Il valore di handle speciale pari a zero indica che la patch è dinamica e non esiste alcun punto di precomputazione o memorizzazione nella cache delle informazioni 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 Flags viene usato per comunicare cosa, se presente, 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 valori 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 viene specificato 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, è anche possibile impostare RTPATCHFLAG_HASSEGS per indicare la presenza delle informazioni sul segmento. Tuttavia, se viene omesso, è necessario usare il valore dello stato di rendering D3DRS_PATCHSEGMENTS.

Se Handle è sottozero e il valore handle non è stato specificato da un D3DDP2OP_DRAWTRIPATCH precedente, ciò 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 visualizzata 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 tuttavia questo problema 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, è anche possibile impostare RTPATCHFLAG_HASSEGS per indicare la presenza delle informazioni sul segmento. Tuttavia, se viene omesso, è necessario 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 Flags contiene RTPATCHFLAG_HASINFO, la definizione per la patch viene aggiornata. Una struttura dei dati D3DTRIPATCH_INFO segue nel flusso DP2 e il driver deve usarlo per ricompilare e ricachere le informazioni sulle patch. Facoltativamente, è anche possibile impostare RTPATCHFLAG_HASSEGS per indicare la presenza delle informazioni sul segmento. Tuttavia, se viene omesso, è necessario usare il valore dello stato di rendering D3DRS_PATCHSEGMENTS.

Se Handle è sottozero, il valore handle è stato specificato da un token D3DDP2OP_DRAWTRIPATCH precedente e il campo Flags 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 sui segmenti. Pertanto, il driver deve verificare la presenza del flag RTPATCHFLAG_HASSEGS e gestire le informazioni sui segmenti 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.

Requisiti

Requisito Valore
Intestazione d3dhal.h (include D3dhal.h)

Vedi anche

D3DDP2OP_DRAWTRIPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWRECTPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2