Freigeben über


PFND3DDDI_COMPOSERECTS Rückruffunktion (d3dumddi.h)

Die ComposeRects-Funktion erstellt zweidimensionale Bereiche von einer Quelloberfläche zu einer Zieloberfläche.

Syntax

PFND3DDDI_COMPOSERECTS Pfnd3dddiComposerects;

HRESULT Pfnd3dddiComposerects(
  HANDLE hDevice,
  const D3DDDIARG_COMPOSERECTS *unnamedParam2
)
{...}

Parameter

hDevice

Ein Handle für das Anzeigegerät (Grafikkontext).

unnamedParam2

pData [in]

Ein Zeiger auf eine D3DDDIARG_COMPOSERECTS-Struktur , die die Parameter angibt, die zum Zusammenstellen rechteckiger Bereiche verwendet werden.

Rückgabewert

ComposeRects gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK Die rechteckigen Bereiche wurden erfolgreich zusammengestellt.
E_OUTOFMEMORY ComposeRects konnte nicht den erforderlichen Arbeitsspeicher zuweisen, um ihn zu vervollständigen.

Hinweise

Die folgenden Einschränkungen und Überprüfungen gelten für die ComposeRects-Funktion :

  • Der Treiber sollte die rechteckigen Quellbereiche ignorieren, die sich nicht vollständig innerhalb der Quelloberfläche befinden.
  • Die rechteckigen Zielbereiche können - nach dem Anwenden von Offsets - teilweise oder vollständig außerhalb der Zieloberfläche liegen. Die rechteckigen Zielbereiche werden abgeschnitten, wenn sie teilweise außerhalb und verworfen oder ganz außerhalb abgeschnitten werden.
  • Die gleiche Oberfläche kann nicht für die Quelle und das Ziel angegeben werden.
  • Oberflächen und Vertexpuffer, die mit ComposeRects verwendet werden, sollten nicht gesperrt werden.
  • Die Quell- und Zieloberflächen werden beim Erstellen als ein Bit pro Pixel (D3DDDIFMT_A1) formatiert.
  • Im Debugbuild überprüft die Microsoft Direct3D-Runtime, ob eine Rechteckige Quellbereichsbeschreibung für jeden Index in der Beschreibung des rechteckigen Zielbereichs vorhanden ist. Beim Einzelhandelsbuild gibt ComposeRects einen Fehler zurück, wenn ein ungültiger Index vorhanden ist.
  • Die Anzahl der rechteckigen Bereiche sollte kleiner als 0xFFFF sein, um einen internen Überlauf während mathematischer Vorgänge zu verhindern.
  • Oberflächen und Vertexpuffer sollten mit demselben Anzeigegerät (Grafikkontext) erstellt werden.
  • Der lokale Anzeigespeicher sollte für die Zieloberfläche angegeben werden.
Der folgende Beispielcode zeigt einen Vorgang, den ComposeRects ausführt:
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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Desktop
Kopfzeile d3dumddi.h (include D3dumddi.h)

Weitere Informationen

D3DDDIARG_COMPOSERECTS

D3DDDI_DEVICEFUNCS