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).
- 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.
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.
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 |