Freigeben über


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.

HinweisGilt nur für Featureebenen 9_x Hardware- Wenn Sie ID3D11DeviceContext::UpdateSubresource oder CopySubresourceRegion verwenden, um von einer Stagingressource in eine Standardressource zu kopieren, können Sie den Zielinhalt beschädigen. Dies tritt auf, wenn Sie ein NULL- Quellfeld übergeben und wenn die Quellressource unterschiedliche Dimensionen aufweist als die der Zielressource oder wenn Sie Zieloffsets verwenden (x, y und z). Übergeben Sie in diesem Fall immer ein Quellfeld, das die vollständige Größe der Quellressource darstellt.
 
HinweisGilt nur für Featureebenen 9_x Hardware- Sie können CopySubresourceRegion- nicht verwenden, um Mipmapped-Volumetexturen zu kopieren.
 
HinweisGilt nur für Featureebenen 9_x Unterressourcen, die mit dem flag D3D11_BIND_DEPTH_STENCIL erstellt wurden, können nur als Quelle für CopySubresourceRegionverwendet werden.
 
Hinweis Wenn Sie CopySubresourceRegion mit einem Tiefenschablonenpuffer oder einer Multisamplingressource verwenden, müssen Sie die gesamte Unterressource kopieren. In diesem Fall müssen Sie 0 an die DstX, DstYund DstZ Parameter übergeben und NULL- an den pSrcBox Parameter übergeben. Darüber hinaus sollten Quell- und Zielressourcen, die durch die pSrcResource und pDstResource Parameter dargestellt werden, identische Beispielanzahlswerte aufweisen.
 

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

Siehe auch

ID3D11DeviceContext-

ID3D11Resource-