D3DHAL_DP2DRAWRECTPATCH struttura (d3dhal.h)

DirectX 8.0 e versioni successive solo.

D3DHAL_DRAWRECTPATCH viene analizzato dal buffer dei comandi dal callback D3dDrawPrimitives2 quando il membro bCommand della struttura di D3DHAL_DP2COMMAND viene impostato su D3DDP2OP_DRAWRECTPATCH e viene usato per eseguire il rendering di una patch rettangolare.

Sintassi

typedef struct _D3DHAL_DP2DRAWRECTPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWRECTPATCH;

Members

Handle

Specifica l'handle associato alla superficie.

Flags

Specifica cosa, se presente, altre informazioni seguono la struttura di dati D3DHAL_DP2DRAWRECTPATCH nel flusso DP2.

Commenti

Il membro Handle viene usato per associare la superficie a un handle, in modo che la prossima volta che questa superficie venga disegnata, non è necessario ripecificare la D3DRECTPATCH_INFO struttura dei dati per questa patch. Ciò consente al driver di precomputere e memorizzare nella cache i coefficienti di differenza di inoltro e/o qualsiasi altra informazione, che a sua volta consente ai token di D3DDP2OP_DRAWRECTPATCH successivi di usare lo stesso handle per eseguire in modo più efficiente. D3DRECTPATCH_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 gestire qualsiasi valore che può essere specificato da una 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 sottozero 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, altre informazioni seguono la struttura di dati D3DHAL_DP2DRAWRECTPATCH nel flusso DP2. Se RTPATCHFLAG_HASSEGS viene specificato, quattro valori a virgola mobile seguono D3DHAL_DP2DRAWRECTPATCH nel flusso DP2. Questi float assegnano i conteggi dei segmenti per ognuno dei quattro bordi della patch rettangolare e sostituiscono il valore dello stato di rendering D3DRS_PATCHSEGMENTS. Se viene specificato RTPATCHFLAG_HASINFO, una struttura di dati D3DRECTPATCH_INFO segue nel flusso DP2. Se vengono specificati entrambi i flag, i quattro float che specificano i conteggi dei segmenti seguono D3DHAL_DP2DRAWRECTPATCH e la struttura D3DRECTPATCH_INFO segue i valori a virgola mobile.

Esistono quattro scenari che un driver deve gestire durante l'elaborazione D3DDP2OP_DRAWRECTPATCH.

Se Handle è zero, la patch è dinamica e non deve essere eseguita alcuna precomputazione o memorizzazione nella cache. In questo caso, un D3DRECTPATCH_INFO segue D3DHAL_DP2DRAWRECTPATCH nel flusso DP2 e il flag RTPATCHFLAG_HASINFO è impostato per indicare la presenza della struttura dei dati D3DRECTPATCH_INFO. Facoltativamente, RTPATCHFLAG_HASSEGS può anche essere impostato per indicare la presenza delle informazioni del segmento. Tuttavia, se viene omesso, il valore dello stato di rendering D3DRS_PATCHSEGMENTS deve essere usato.

Se Handle è sottozero e il valore di handle non è stato specificato da un D3DDP2OP_DRAWRECTPATCH precedente, questo indica che viene disegnata una nuova patch memorizzata nella cache. Il driver deve allocare memoria per archiviare i dati memorizzati nella cache e aggiungere questi dati alla tabella di gestione delle patch. Poiché questa patch non è stata vista prima, il flag di RTPATCHFLAG_HASINFO deve essere impostato e una struttura D3DRECTPATCH_INFO deve essere seguita nel flusso DP2. Il runtime non garantisce tuttavia questa operazione e il driver deve verificare la presenza delle informazioni sulla patch testando il flag. Se non vengono specificate informazioni, questo token deve essere ignorato e non deve essere allocato alcun handle nella tabella di handle patch del driver. Facoltativamente, RTPATCHFLAG_HASSEGS può anche essere impostato per indicare la presenza delle informazioni del segmento. Tuttavia, se viene omesso, il valore dello stato di rendering D3DRS_PATCHSEGMENTS deve essere usato.

Se Handle è sottozero, il valore handle è stato specificato da un token di D3DDP2OP_DRAWRECTPATCH precedente e il campo Flags contiene RTPATCHFLAG_HASINFO, la definizione per la patch viene aggiornata. Una struttura di dati D3DRECTPATCH_INFO segue nel flusso DP2 e il driver deve usarlo per ricompilare e ricompilare le informazioni sulle patch. Facoltativamente, RTPATCHFLAG_HASSEGS può anche essere impostato per indicare la presenza delle informazioni del segmento. Tuttavia, se viene omesso, il valore dello stato di rendering D3DRS_PATCHSEGMENTS deve essere usato.

Se Handle è sottozero, il valore di handle è stato specificato da un token di D3DDP2OP_DRAWRECTPATCH precedente e il campo Flags non contiene RTPATCHFLAG_HASINFO, le informazioni memorizzate nella cache devono essere usate per il disegno della patch. In questo caso, i flussi di vertice correnti vengono ignorati; le informazioni memorizzate nella cache devono essere usate invece. Tuttavia, è comunque possibile specificare una nuova informazione del 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 la 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_DRAWRECTPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWTRIPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2