ID3D11DeviceContext::CopySubresourceRegion-Methode (d3d11.h)
Kopieren sie eine Region aus einer Quellressource in eine Zielressource.
Syntax
void CopySubresourceRegion(
[in] ID3D11Resource *pDstResource,
[in] UINT DstSubresource,
[in] UINT DstX,
[in] UINT DstY,
[in] UINT DstZ,
[in] ID3D11Resource *pSrcResource,
[in] UINT SrcSubresource,
[in, optional] const D3D11_BOX *pSrcBox
);
Parameter
[in] pDstResource
Typ: ID3D11Resource-*
Ein Zeiger auf die Zielressource (siehe ID3D11Resource-).
[in] DstSubresource
Typ: UINT-
Zielunterressourcenindex.
[in] DstX
Typ: UINT-
Die x-Koordinate der oberen linken Ecke des Zielbereichs.
[in] DstY
Typ: UINT-
Die Y-Koordinate der oberen linken Ecke des Zielbereichs. Für eine 1D-Unterressource muss dies null sein.
[in] DstZ
Typ: UINT-
Die Z-Koordinate der oberen linken Ecke des Zielbereichs. Für eine 1D- oder 2D-Unterressource muss dies null sein.
[in] pSrcResource
Typ: ID3D11Resource-*
Ein Zeiger auf die Quellressource (siehe ID3D11Resource-).
[in] SrcSubresource
Typ: UINT-
Quellunterressourcenindex.
[in, optional] pSrcBox
Typ: D3D11_BOX*
Ein Zeiger auf ein 3D-Feld (siehe D3D11_BOX), das die Quellunterressource definiert, die kopiert werden kann. Wenn NULL-, wird die gesamte Quellunterressource kopiert. Das Feld muss in die Quellressource passen.
Ein leeres Feld führt zu einer no-op. Ein Feld ist leer, wenn der obere Wert größer oder gleich dem untersten Wert ist, oder der linke Wert größer oder gleich dem rechten Wert ist, oder der Frontwert größer oder gleich dem Rückwert ist. Wenn das Feld leer ist, führt CopySubresourceRegion keinen Kopiervorgang aus.
Rückgabewert
Nichts
Bemerkungen
Das Quellfeld muss in der Größe der Quellressource enthalten sein. Die Zieloffsets (x, y und z) ermöglichen das Offset des Quellfelds beim Schreiben in die Zielressource; Die Abmessungen des Quellfelds und der Offsets müssen jedoch innerhalb der Größe der Ressource sein. Wenn Sie versuchen, außerhalb der Zielressource zu kopieren oder ein Quellfeld anzugeben, das größer als die Quellressource ist, ist das Verhalten CopySubresourceRegion nicht definiert. Wenn Sie ein Gerät erstellt haben, das die Debugebeneunterstützt, meldet die Debugausgabe einen Fehler bei diesem ungültigen CopySubresourceRegion Aufruf. Ungültige Parameter für CopySubresourceRegion verursachen ein nicht definiertes Verhalten und können zu falschem Rendering, Clipping, keine Kopie oder sogar zum Entfernen des Renderinggeräts führen.
Wenn die Ressourcen Puffer sind, befinden sich alle Koordinaten in Byte; wenn es sich bei den Ressourcen um Texturen handelt, befinden sich alle Koordinaten in Texeln. D3D11CalcSubresource ist eine Hilfsfunktion zum Berechnen von Unterressourcenindizes.
CopySubresourceRegion führt die Kopie auf der GPU aus (ähnlich einem Memcpy durch die CPU). Die Quell- und Zielressourcen sind daher wie folgt:
- Muss unterschiedliche Unterressourcen sein (obwohl sie aus derselben Ressource stammen können).
- Muss derselbe Typ sein.
- Muss kompatible DXGI-Formate haben (identisch oder aus derselben Typgruppe). Beispielsweise kann eine DXGI_FORMAT_R32G32B32_FLOAT Textur in eine DXGI_FORMAT_R32G32B32_UINT Textur kopiert werden, da sich beide Formate in der gruppe DXGI_FORMAT_R32G32B32_TYPELESS befinden. CopySubresourceRegion können zwischen einigen Formattypen kopiert werden. Weitere Informationen finden Sie unter Formatkonvertierung mit Direct3D 10.1.
- Möglicherweise ist sie derzeit nicht zugeordnet.
CopySubresourceRegion unterstützt nur kopieren; Es unterstützt keine Streckung, Farbtaste oder Mischung. CopySubresourceRegion- können die Ressourcendaten zwischen einigen Formattypen erneut interpretieren. Weitere Informationen finden Sie unter Formatkonvertierung mit Direct3D 10.1.
Wenn Ihre App eine gesamte Ressource kopieren muss, empfiehlt es sich stattdessen, ID3D11DeviceContext::CopyResource zu verwenden.
CopySubresourceRegion ein asynchroner Aufruf ist, der der Befehlspufferwarteschlange hinzugefügt werden kann, versucht, Pipeline-Stände zu entfernen, die beim Kopieren von Daten auftreten können. Weitere Informationen zu Pipelineständen finden Sie unter Leistungsüberlegungen.
Beispiel
Der folgende Codeausschnitt kopiert ein Feld (120.100),(200.220)) aus einer Quelltextur in einen Bereich (10.20),(90.140) in einer Zieltextur.D3D11_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;
pd3dDeviceContext->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion );
Beachten Sie, dass für eine 2D-Textur, Front und Rückseite auf 0 bzw. 1 festgelegt sind.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Fenster |
Header- | d3d11.h |
Library | D3D11.lib |