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.
Il codice di esempio seguente mostra un'operazione eseguita da ComposeRects :
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)

Vedi anche

D3DDDIARG_COMPOSERECTS

D3DDDI_DEVICEFUNCS