Condividi tramite


struttura D3DHAL_DP2TEXBLT (d3dhal.h)

La struttura D3DHAL_DP2TEXBLT viene usata per i blts della trama quando D3dDrawPrimitives2 risponde al token del comando D3DDP2OP_TEXBLT.

Sintassi

typedef struct _D3DHAL_DP2TEXBLT {
  DWORD dwDDDestSurface;
  DWORD dwDDSrcSurface;
  POINT pDest;
  RECTL rSrc;
  DWORD dwFlags;
} D3DHAL_DP2TEXBLT;

Members

dwDDDestSurface

Specifica l'handle per la trama di destinazione.

dwDDSrcSurface

Specifica l'handle per la trama di origine.

pDest

Specifica il punto di destinazione in cui deve essere eseguito il blt, ovvero il punto nella superficie di destinazione (dwDDDestSurface) per iniziare il blt. Questi membri x e y della struttura POINT vengono specificati nelle coordinate dello schermo.

rSrc

Specifica il rettangolo da blittare nella trama di origine, ovvero il rettangolo di origine nella superficie di origine (dwDDSrcSurface) da cui eseguire il blt.

dwFlags

Riservato per l'utilizzo nel sistema.

Commenti

Il callback D3dCreateSurfaceEx crea gli handle integer piccoli per le trame che possono essere usate come trame di origine e di destinazione per i blts di trama.

La struttura D3DHAL_DP2TEXBLT viene usata con un token del flusso di comandi D3DDP2OP_TEXBLT per informare i driver di eseguire un'operazione blt da una trama di origine a una trama di destinazione. Una trama può anche essere una mappa di ambiente cubica. Il driver deve copiare un rettangolo specificato da rSrc nella trama di origine nella posizione specificata da pDest nella trama di destinazione. Le trame di destinazione e di origine sono identificate da handle con cui il driver riceve una notifica durante la creazione della trama. Se il driver è in grado di gestire le trame, è possibile che l'handle di destinazione sia 0. Questo indica al driver che deve precaricare la trama in memoria video (o ovunque l'hardware sia in grado di ottenere trame efficienti). In questo caso, il driver può ignorare rSrc e pDest.

Si noti che per le trame mappate MIP viene inserita una sola istruzione D3DDP2OP_TEXBLT nel flusso di comandi D3dDrawPrimitives2 . In questo caso, il driver dovrebbe eseguire il blt di tutti i livelli di mappa MIP presenti nella trama. Le aree da copiare nei sublevel della mappa MIP possono essere ottenute dividendo rSrc epDest per 2 a ogni livello.

È possibile che le trame di origine e di destinazione contengano numeri diversi di livelli di mappa MIP. In questo caso, è previsto che il driver batta i livelli comuni. Ad esempio, se una trama di origine 256x256 ha 8 livelli di mappa MIP e se la destinazione è una trama di 64x64 con 6 livelli, il driver deve eseguire il blt dei 6 livelli corrispondenti dall'origine. Il driver può prevedere che le dimensioni del livello MIP superiore della trama di destinazione siano sempre minori o uguali alle dimensioni del livello MIP principale della trama di origine.

Si noti che gli handle di origine e destinazione fanno sempre riferimento alle superfici di livello superiore e non a nessun livello di mappa MIP. A causa di un errore nell'applicazione, è possibile che la trama di destinazione contenga livelli di mappa MIP aggiuntivi. Ad esempio, una trama di origine 256x256 può contenere cinque livelli, ma la trama di destinazione 256x256 può contenere otto. Si prevede che il driver gestisca in modo sicuro questo caso, ma non è previsto che producano risultati corretti. A causa di problemi di compatibilità delle applicazioni legacy, Direct3D non impedisce che tali coppie di trame di origine/destinazione vengano passate al driver.

Il driver può prevedere che i formati pixel delle trame di origine e di destinazione siano identici e, in generale, il blt specificato è sicuro da eseguire. Oltre al singolo caso menzionato in precedenza, il conducente non dovrebbe aspettarsi di presentare alcuna situazione che rende impossibile eseguire una blt.

Se il driver vuole eseguire blts asincroni dalla memoria di sistema alla memoria video, deve implementare la chiamata HAL DirectDraw GetSysmemBltStatus, in caso contrario, potrebbero verificarsi incoerenze.

Con TexBlt non è necessario che il driver esegua alcuna sincronizzazione perché TexBlts viene sempre emesso nell'ordine corretto insieme ai comandi di rendering. Prima di questo, era necessario che il driver gestisca correttamente il caso quando un directDraw blt modificava qualsiasi trama a cui si fa riferimento tramite comandi di rendering in qualsiasi contesto Direct3D. Quando sono presenti più contesti, Direct3D non rilascia TexBlts. Ciò significa che il writer del driver può omettere il codice di sincronizzazione nel percorso del codice TexBlt (ma richiede comunque la sincronizzazione per blts).

Esempio

Lo pseudocodice seguente mostra come calcolare un subrectangle per i livelli MIP consecutivi, per passare al livello MIP i + 1 dal livello MIP i:

rect.left >>= 1; 
rect.top >>= 1; 
DWORD right = (rect.right + 1) >> 1; 
DWORD bottom = (rect.bottom + 1) >> 1; 
rect.right = ((right - rect.left) < 1) ? 
    (rect.left + 1) : (right); 
rect.bottom = ((bottom - rect.top ) < 1) ? 
    (rect.top + 1) : (bottom);

Requisiti

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

Vedi anche

D3DDP2OP_TEXBLT

D3dCreateSurfaceEx

D3dDrawPrimitives2