Share via


Metodo ID3D10Device::CopySubresourceRegion (d3d10.h)

Copiare un'area da una risorsa di origine a una risorsa di destinazione.

Sintassi

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

Parametri

[in] pDstResource

Tipo: ID3D10Resource*

Puntatore alla risorsa di destinazione (vedere ID3D10Resource).

[in] DstSubresource

Tipo: UINT

Indice subresource della destinazione.

[in] DstX

Tipo: UINT

Coordinata x dell'angolo superiore sinistro dell'area di destinazione.

[in] DstY

Tipo: UINT

Coordinata y dell'angolo superiore sinistro dell'area di destinazione.

[in] DstZ

Tipo: UINT

Coordinata z dell'angolo superiore sinistro dell'area di destinazione. Per una sottoresource 1D o 2D, questo deve essere zero.

[in] pSrcResource

Tipo: ID3D10Resource*

Puntatore alla risorsa di origine (vedere ID3D10Resource).

[in] SrcSubresource

Tipo: UINT

Indice subresource dell'origine.

[in] pSrcBox

Tipo: const D3D10_BOX*

Casella 3D (vedere D3D10_BOX) che definisce la sottoresource di origine che può essere copiata. Se NULL, l'intera sottoresource di origine viene copiata. La casella deve adattarsi alla risorsa di origine.

Una casella vuota genera un no-op. Una casella è vuota se il valore superiore è maggiore o uguale al valore inferiore oppure il valore sinistro è maggiore o uguale al valore destro oppure il valore anteriore è maggiore o uguale al valore posteriore. Quando la casella è vuota, CopySubresourceRegion non esegue un'operazione di copia.

Valore restituito

nessuno

Osservazioni

La casella di origine deve essere compresa nella dimensione della risorsa di origine. La posizione di destinazione è un valore assoluto (non un valore relativo). La posizione di destinazione può essere offset dalla posizione di origine; tuttavia, le dimensioni dell'area da copiare (inclusa la posizione di destinazione) devono essere incluse nella risorsa di destinazione.

Se le risorse sono buffer, tutte le coordinate sono in byte; se le risorse sono trame, tutte le coordinate sono in texel.

D3D10CalcSubresource è una funzione helper per il calcolo degli indici di sottoresource.

CopySubresourceRegion esegue la copia nella GPU (simile a un memcpy dalla CPU). Di conseguenza, le risorse di origine e destinazione devono soddisfare i criteri seguenti:

  • Devono essere diverse sottoresource (anche se possono essere dalla stessa risorsa).
  • Deve essere lo stesso tipo.
  • Deve avere formati compatibili (i formati devono essere identici o essere dello stesso gruppo di tipi). Ad esempio, una trama DXGI_FORMAT_R32G32B32_FLOAT può essere copiata in una trama DXGI_FORMAT_R32G32B32_UINT perché entrambi questi formati si trovano nel gruppo DXGI_FORMAT_R32G32B32_TYPELESS. A partire da Direct3D 10.1, CopySubresourceRegion può copiare tra alcuni tipi di formato. Per altre informazioni, vedere Conversione del formato con Direct3D 10.1.
  • Potrebbe non essere attualmente mappato.
CopySubresourceRegion supporta solo la copia; non supporta alcuna conversione di tipo stretch, color key, blend o format. A partire da Direct3D 10.1, CopySubresourceRegion può reinterpretare i dati delle risorse tra alcuni tipi di formato. Per altre informazioni, vedere Conversione del formato con Direct3D 10.1.

Se l'app deve copiare un'intera risorsa, è consigliabile usare invece ID3D10Device::CopyResource .

CopySubresourceRegion è una chiamata asincrona che il runtime può aggiungere alla coda del buffer dei comandi. Questo comportamento asincrono viene eseguito per rimuovere gli stalli della pipeline che possono verificarsi durante la copia dei dati. Per altre informazioni, vedere Considerazioni sulle prestazioni .

Differenze tra Direct3D 10 e Direct3D 10.1:

Direct3D 10 presenta le limitazioni seguenti:

  • Non è possibile usare una risorsa depth-stencil come destinazione.
  • Non è possibile usare una risorsa non modificabile come destinazione.
  • Non è possibile usare una trama multicampionata come origine o destinazione
Direct3D 10.1 ha aggiunto il supporto per le funzionalità seguenti:
  • È possibile usare un buffer depth-stencil come origine o destinazione.
  • È possibile usare risorse multicampionate come origine e destinazione solo se sia l'origine che la destinazione hanno un conteggio e una qualità multicampionati identici. Se l'origine e la destinazione differiscono nel conteggio e nella qualità multisampled o se l'origine è multicampionata e la destinazione non è multicampionata (o viceversa), la chiamata a ID3D10Device::CopySubresourceRegion ha esito negativo.
  • È possibile copiare tra risorse non compresse e compresse. Durante la copia, le conversioni di formato specificate in Conversione formato tramite Direct3D 10.1 sono supportate automaticamente. La risorsa non compressa deve essere almeno prestrutturata e digitata. È anche necessario tenere conto della differenza tra la dimensione virtuale e la dimensione fisica dei livelli mipmap.
 
Nota Se si usa CopySubresourceRegion con un buffer depth-stencil o una risorsa multisampled, è necessario copiare l'intera sottoresource. È necessario passare anche 0 ai parametri DstX, DstY e DstZ e NULL al parametro pSrcBox. Inoltre, le risorse di origine e di destinazione, rappresentate rispettivamente dai parametri pSrcResource e pDstResource , devono avere valori di conteggio di esempio identici.
 

Esempio

Il frammento di codice seguente copia una casella (situata in (120.100),(200.220)) da una trama di origine in un'area (130.120),(210.240) in una trama di destinazione.

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

Si noti che, per una trama 2D, la parte anteriore e posteriore sono sempre impostate rispettivamente su 0 e 1.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione d3d10.h
Libreria D3D10.lib

Vedi anche

ID3D10Device

Interfaccia ID3D10Resource