ID3D10Device::CopySubresourceRegion-Methode (d3d10.h)

Kopieren Sie eine Region aus einer Quellressource in eine Zielressource.

Syntax

void CopySubresourceRegion(
  [in] ID3D10Resource  *pDstResource,
  [in] UINT            DstSubresource,
  [in] UINT            DstX,
  [in] UINT            DstY,
  [in] UINT            DstZ,
  [in] ID3D10Resource  *pSrcResource,
  [in] UINT            SrcSubresource,
  [in] const D3D10_BOX *pSrcBox
);

Parameter

[in] pDstResource

Typ: ID3D10Resource*

Ein Zeiger auf die Zielressource (siehe ID3D10Resource).

[in] DstSubresource

Typ: UINT

Unterressourcenindex des Ziels.

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

[in] DstZ

Typ: UINT

Die z-Koordinate der oberen linken Ecke des Zielbereichs. Bei einer 1D- oder 2D-Unterressource muss dies null sein.

[in] pSrcResource

Typ: ID3D10Resource*

Ein Zeiger auf die Quellressource (siehe ID3D10Resource).

[in] SrcSubresource

Typ: UINT

Unterressourcenindex der Quelle.

[in] pSrcBox

Typ: const D3D10_BOX*

Ein 3D-Feld (siehe D3D10_BOX), das die zu kopierenden Quellunterressourcen definiert. Bei NULL wird die gesamte Quellunterressource kopiert. Das Feld muss in die Quellressource passen.

Ein leeres Feld führt zu einem No-Op. Ein Feld ist leer, wenn der obere Wert größer oder gleich dem unteren Wert oder der linke Wert größer oder gleich dem rechten Wert ist oder der vordere Wert größer oder gleich dem back-Wert ist. Wenn das Feld leer ist, führt CopySubresourceRegion keinen Kopiervorgang aus.

Rückgabewert

Keine

Bemerkungen

Das Quellfeld muss innerhalb der Größe der Quellressource sein. Der Zielspeicherort ist ein absoluter Wert (kein relativer Wert). Der Zielspeicherort kann vom Quellspeicherort versetzt werden. Die Größe der zu kopierenden Region (einschließlich des Zielspeicherorts) muss jedoch in die Zielressource passen.

Wenn es sich bei den Ressourcen um Puffer handelt, sind alle Koordinaten in Byte; Wenn es sich bei den Ressourcen um Texturen handelt, befinden sich alle Koordinaten in Texel.

D3D10CalcSubresource ist eine Hilfsfunktion zum Berechnen von Unterressourcenindizes.

CopySubresourceRegion führt die Kopie auf der GPU aus (ähnlich einem Memcpy durch die CPU). Daher müssen die Quell- und Zielressourcen die folgenden Kriterien erfüllen:

  • Müssen unterschiedliche Unterressourcen sein (obwohl sie aus derselben Ressource stammen können).
  • Muss der gleiche Typ sein.
  • Muss kompatible Formate aufweisen (die Formate müssen entweder identisch sein oder aus derselben Typgruppe stammen). 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. Ab Direct3D 10.1 kann CopySubresourceRegion zwischen einigen Formattypen kopieren. Weitere Informationen finden Sie unter Formatkonvertierung mit Direct3D 10.1.
  • Möglicherweise wird derzeit nicht zugeordnet.
CopySubresourceRegion unterstützt nur Das Kopieren. Es unterstützt keine Dehnungs-, Farbtasten-, Blend- oder Formatkonvertierungen. Ab Direct3D 10.1 kann CopySubresourceRegion die Ressourcendaten zwischen einigen Formattypen neu interpretieren. Weitere Informationen finden Sie unter Formatkonvertierung mit Direct3D 10.1.

Wenn Ihre App eine gesamte Ressource kopieren muss, wird empfohlen, stattdessen ID3D10Device::CopyResource zu verwenden.

CopySubresourceRegion ist ein asynchroner Aufruf, den die Runtime der Befehlspufferwarteschlange hinzufügen kann. Dieses asynchrone Verhaltenaufbemerkt, um Pipeline-Stagnierungen zu entfernen, die beim Kopieren von Daten auftreten können. Weitere Informationen finden Sie unter Überlegungen zur Leistung .

Unterschiede zwischen Direct3D 10 und Direct3D 10.1:

Direct3D 10 weist die folgenden Einschränkungen auf:

  • Sie können keine Tiefenschablonenressource als Ziel verwenden.
  • Sie können keine unveränderliche Ressource als Ziel verwenden.
  • Sie können keine mehrsampige Textur als Quelle oder Ziel verwenden.
Direct3D 10.1 hat Unterstützung für die folgenden Features hinzugefügt:
  • Sie können einen Tiefenschablonenpuffer als Quelle oder Ziel verwenden.
  • Sie können multisampled-Ressourcen nur dann als Quelle und Ziel verwenden, wenn sowohl Quell- als auch Zielanzahl und -qualität identisch sind. Wenn sich Quelle und Ziel in Der Anzahl und Qualität von Multisampled unterscheiden oder wenn die Quelle multisampled ist und das Ziel nicht multisampled ist (oder umgekehrt), schlägt der Aufruf von ID3D10Device::CopySubresourceRegion fehl.
  • Sie können zwischen unkomprimierten und komprimierten Ressourcen kopieren. Während des Kopiervorgangs werden die Formatkonvertierungen, die unter Formatkonvertierung mit Direct3D 10.1 angegeben sind, automatisch unterstützt. Die nicht komprimierte Ressource muss mindestens vorstrukturiert und typisiert sein. Sie müssen auch den Unterschied zwischen der virtuellen und der physischen Größe der Mipmaps-Ebenen berücksichtigen.
 
Hinweis Wenn Sie CopySubresourceRegion mit einem Tiefenschablonenpuffer oder einer Multisampled-Ressource verwenden, müssen Sie die gesamte Unterressource kopieren. Außerdem müssen Sie 0 an die Parameter DstX, DstY und DstZ und NULL an den Parameter pSrcBox übergeben. Darüber hinaus müssen Quell- und Zielressourcen, die durch die Parameter pSrcResource bzw . pDstResource dargestellt werden, identische Stichprobenanzahlwerte aufweisen.
 

Beispiel

Der folgende Codeausschnitt kopiert ein Feld (bei (120,100),(200,220)) aus einer Quelltextur in eine Region (130.120),(210.240) in einer Zieltextur.

D3D10_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;

pd3dDevice->CopySubresourceRegion( pDestTexture, 0, 130, 120, 0, pSourceTexture, 0, &sourceRegion );

Beachten Sie, dass bei einer 2D-Textur die Vorder- und Rückseite immer auf 0 bzw. 1 festgelegt sind.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d10.h
Bibliothek D3D10.lib

Weitere Informationen

ID3D10Geräte

ID3D10Resource-Schnittstelle