PFND3DDDI_COMPOSERECTS funzione di callback (d3dumddi.h)
La funzione ComposeRects compone aree bidimensionali da una superficie di origine a una superficie di destinazione.
Sintassi
PFND3DDDI_COMPOSERECTS Pfnd3dddiComposerects;
HRESULT Pfnd3dddiComposerects(
HANDLE hDevice,
const D3DDDIARG_COMPOSERECTS *unnamedParam2
)
{...}
Parametri
hDevice
Handle per il dispositivo di visualizzazione (contesto grafico).
unnamedParam2
pData [in]
Puntatore a una struttura D3DDDIARG_COMPOSERECTS che specifica i parametri utilizzati per comporre aree rettangolari.
Valore restituito
ComposeRects restituisce uno dei valori seguenti:
Codice restituito | Descrizione |
---|---|
S_OK | Le aree rettangolari sono state composte correttamente. |
E_OUTOFMEMORY | ComposeRects non è riuscito ad allocare la memoria necessaria per il completamento. |
Commenti
I vincoli e le convalide seguenti si applicano alla funzione ComposeRects :
- Il driver deve ignorare le aree rettangolari di origine che non sono completamente all'interno della superficie di origine.
- Le aree rettangolari di destinazione, dopo l'applicazione degli offset, possono essere parzialmente o completamente esterne alla superficie di destinazione. Le aree rettangolari di destinazione vengono ritagliate se parzialmente esterne e rifiutate o completamente ritagliate se completamente esterne.
- Non è possibile specificare la stessa superficie per l'origine e la destinazione.
- Le superfici e i vertex buffer utilizzati con ComposeRects non devono essere bloccati.
- Le superfici di origine e di destinazione vengono formattate come un bit per pixel (D3DDDIFMT_A1) quando vengono create.
- Nella compilazione di debug, il runtime di Microsoft Direct3D verifica che esista una descrizione dell'area rettangolare di origine per ogni indice nella descrizione dell'area rettangolare di destinazione. Nella build definitiva ComposeRects restituisce un errore se esiste un indice non valido.
- Il numero di aree rettangolari deve essere minore di 0xFFFF per evitare l'overflow interno durante le operazioni matematiche.
- Le superfici e i vertex buffer devono essere creati usando lo stesso dispositivo di visualizzazione (contesto grafico).
- La memoria di visualizzazione locale deve essere specificata per la superficie di destinazione.
for (UINT i=0; i < COMPOSERECTS.NumDstRects; i++) {
if (i >= Size(VertexBuffer(hDstRectDescsVB)) / sizeof(D3DCOMPOSERECTDSTDESC))
Ignore the rectangle;
if (VertexBuffer(hDstRectDescsVB)[i].RectDescIndex >= Size(VertexBuffer(hSrcRectDescsVB)) / sizeof(D3DCOMPOSERECTSRCDESC))
Ignore the rectangle;
SourceRectangle = VertexBuffer(hSrcResource)[VertexBuffer(hDstRectDescsVB)[i].RectDescIndex];
DestinationRectangle.X = {VertexBuffer(hDstRectDescsVB)[i].X + COMPOSERECTS.Xoffset;
DestinationRectangle.Y = {VertexBuffer(hDstRectDescsVB)[i].Y + COMPOSERECTS.Yoffset;
DestinationRectangle.Width = SourceRectangle.Width;
DestinationRectangle.Height = SourceRectangle.Height;
Perform COMPOSERECTS.Operation for each pixel;
}
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) |