Freigeben über


IDirect3DDevice9::StretchRect-Methode (d3d9.h)

Kopieren Sie den Inhalt des Quellrechtecks in das Zielrechteck. Das Quellrechteck kann gestreckt und nach der Kopie gefiltert werden. Diese Funktion wird häufig verwendet, um das Seitenverhältnis eines Videostreams zu ändern.

Syntax

HRESULT StretchRect(
  [in] IDirect3DSurface9    *pSourceSurface,
  [in] const RECT           *pSourceRect,
  [in] IDirect3DSurface9    *pDestSurface,
  [in] const RECT           *pDestRect,
  [in] D3DTEXTUREFILTERTYPE Filter
);

Parameter

[in] pSourceSurface

Typ: IDirect3DSurface9*

Zeiger auf die Quelloberfläche. Siehe IDirect3DSurface9.

[in] pSourceRect

Typ: const RECT*

Zeiger auf das Quellrechteck. Ein NULL für diesen Parameter bewirkt, dass die gesamte Quelloberfläche verwendet wird.

[in] pDestSurface

Typ: IDirect3DSurface9*

Zeiger auf die Zieloberfläche. Siehe IDirect3DSurface9.

[in] pDestRect

Typ: const RECT*

Zeiger auf das Zielrechteck. Ein NULL-Wert für diesen Parameter bewirkt, dass die gesamte Zieloberfläche verwendet wird.

[in] Filter

Typ: D3DTEXTUREFILTERTYPE

Filtertyp. Zulässige Werte sind D3DTEXF_NONE, D3DTEXF_POINT oder D3DTEXF_LINEAR. Weitere Informationen finden Sie unter D3DTEXTUREFILTERTYPE.

Rückgabewert

Typ: HRESULT

Wenn die Methode erfolgreich ist, wird der Rückgabewert D3D_OK. Wenn die Methode fehlschlägt, kann der Rückgabewert sein: D3DERR_INVALIDCALL.

Hinweise

StretchRect-Einschränkungen

  • Die Treiberunterstützung variiert. Im Abschnitt zur Treiberunterstützung (unten) erfahren Sie, welche Treiber welche Quell- und Zielformate unterstützen.
  • Die Quell- und Zieloberflächen müssen im Standardspeicherpool erstellt werden.
  • Wenn Filter angegeben ist, müssen Sie die entsprechenden Filterkappen festlegen (siehe StretchRectFilterCaps in D3DCAPS9).
  • Das Dehnen zwischen Quell- und Zielrechtecken auf derselben Oberfläche wird nicht unterstützt.
  • Das Strecken wird nicht unterstützt, wenn es sich bei der Zieloberfläche um eine einfache Oberfläche außerhalb des Bildschirms handelt, die Quelle jedoch nicht.
  • Viele strecken sich nicht zwischen Quell- und Zielrechtecken, wenn eine Oberfläche ein komprimiertes Format aufweist (siehe Verwenden von komprimierten Texturen (Direct3D 9)).
  • Das Dehnen unterstützt nur die Farbraumkonvertierung von YUV in RGBA mit hoher Genauigkeit. Da die Unterstützung der Farbkonvertierung von der Softwareemulation nicht unterstützt wird, verwenden Sie IDirect3D9::CheckDeviceFormatConversion , um die Hardware auf Unterstützung für die Farbkonvertierung zu testen.
  • Wenn die Quell- oder Zieloberfläche eine Texturoberfläche (oder eine Würfeltexturoberfläche) ist, müssen Sie einen Direct3D 9-Treiber verwenden, der D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES unterstützt (siehe D3DDEVCAPS2).
Zusätzliche Einschränkungen für Tiefen- und Schablonenoberflächen
  • Quell- und Zieloberflächen müssen einfache Tiefenschablonenoberflächen (keine Texturen) sein (siehe IDirect3DDevice9::CreateDepthStencilSurface).
  • Keine der Oberflächen kann verworfen werden.
  • Die gesamte Oberfläche muss kopiert werden (das heißt: Kopien von Untergeordneten Rechtecks sind nicht zulässig).
  • Formatkonvertierung, Dehnung und Verkleinerung werden nicht unterstützt.
  • StretchRect kann nicht innerhalb eines BeginScene/EndScene-Paares aufgerufen werden.
Verwenden von StretchRect zum Downsample eines Multisample-Rendertargets

Sie können StretchRect verwenden, um von einem Renderziel in einen anderen zu kopieren. Wenn der Quell-Rendertarget multisampled ist, führt dies zu einem Downsampling des Quellrendergets. Für instance könnten Sie:

  • Erstellen Sie ein rendertarget mit mehreren Verstärkern.
  • Erstellen Sie ein zweites Renderziel der gleichen Größe, das nicht multisampled ist.
  • Kopieren Sie (mithilfe von StretchRect das multisample rendertarget in das zweite rendertarget.
Beachten Sie, dass die Verwendung der zusätzlichen Oberfläche, die bei der Verwendung von StretchRect zum Downsample-Downsample-Rendertarget erforderlich ist, zu einem Leistungstreffer führt.

Treiberunterstützung

Es gibt viele Einschränkungen, welche Oberflächenkombinationen für StretchRect gültig sind. Faktoren umfassen, ob der Treiber ein Direct3D 9-Treiber oder ein älterer Treiber ist und ob der Vorgang zu einer Dehnung/Verkleinerung führt. Da von Anwendungen nicht erwartet wird, dass sie erkennen, ob der Treiber ein Direct3D 9-Treiber ist oder nicht, legt die Laufzeit automatisch eine neue Obergrenze D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES -Obergrenze (siehe D3DDEVCAPS2) für Direct3D-Treiber auf 9-Ebene und höher fest.

DirectX 8-Treiber (keine Dehnung)
Dest-Formate
Struktur RT-Textur RT Off-Screen plain
Src-Formate Struktur Nein Nein Nein Nein
RT-Textur Nein Ja Ja Nein
RT Nein Ja Ja Nein
Off-Screen plain Ja Ja Ja Ja
 
DirectX 8-Treiber (Dehnung)
Dest-Formate
Struktur RT-Textur RT Off-Screen plain
Src-Formate Struktur Nein Nein Nein Nein
RT-Textur Nein Nein Nein Nein
RT Nein Ja Ja Nein
Off-Screen plain Nein Ja Ja Nein
 
Direct3D 9-Treiber (keine Dehnung)
Dest-Formate
Struktur RT-Textur RT Off-Screen plain
Src-Formate Struktur Nein Ja Ja Nein
RT-Textur Nein Ja Ja Nein
RT Nein Ja Ja Nein
Off-Screen plain Nein Ja Ja Ja
 
Direct3D 9-Treiber (Dehnung)
Dest-Formate
Struktur RT-Textur RT Off-Screen plain
Src-Formate Struktur Nein Ja Ja Nein
RT-Textur Nein Ja Ja Nein
RT Nein Ja Ja Nein
Off-Screen plain Nein Ja Ja Nein

Anforderungen

   
Zielplattform Windows
Kopfzeile d3d9.h (einschließlich D3D9.h)
Bibliothek D3D9.lib

Weitere Informationen

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene