Metodo ID3D11DeviceContext::CopySubresourceRegion (d3d11.h)

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

Sintassi

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

Parametri

[in] pDstResource

Tipo: ID3D11Resource*

Puntatore alla risorsa di destinazione (vedere ID3D11Resource).

[in] DstSubresource

Tipo: UINT

Indice subresource di 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. Per una sottoresource 1D, questo deve essere zero.

[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: ID3D11Resource*

Puntatore alla risorsa di origine (vedere ID3D11Resource).

[in] SrcSubresource

Tipo: UINT

Indice di sottoresource di origine.

[in, optional] pSrcBox

Tipo: const D3D11_BOX*

Puntatore a una casella 3D (vedere D3D11_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. Gli offset di destinazione, (x, y e z), consentono la offset della casella di origine durante la scrittura nella risorsa di destinazione; tuttavia, le dimensioni della casella di origine e gli offset devono essere entro le dimensioni della risorsa. Se si tenta di copiare e copiare all'esterno della risorsa di destinazione o specificare una casella di origine maggiore della risorsa di origine, il comportamento di CopySubresourceRegion non è definito. Se è stato creato un dispositivo che supporta il livello di debug, l'output di debug segnala un errore in questa chiamata CopySubresourceRegion non valida. I parametri non validi per CopySubresourceRegion causano un comportamento non definito e potrebbero causare rendering non corretto, ritaglio, nessuna copia o anche la rimozione del dispositivo di rendering.

Se le risorse sono buffer, tutte le coordinate sono in byte; se le risorse sono trame, tutte le coordinate sono in texel. D3D11CalcSubresource è una funzione helper per calcolare gli indici di sottoresource.

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

  • Devono essere diverse sottoresource (anche se possono essere dalla stessa risorsa).
  • Deve essere lo stesso tipo.
  • Deve avere formati DXGI compatibili (identici o dallo stesso gruppo di tipi). Ad esempio, una trama DXGI_FORMAT_R32G32B32_FLOAT può essere copiata in una trama DXGI_FORMAT_R32G32B32_UINT poiché entrambi questi formati si trovano nel gruppo DXGI_FORMAT_R32G32B32_TYPELESS. 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 alcun tratto, chiave di colore o miscela. **CopySubresourceRegion** può reinterpretare i dati delle risorse tra alcuni tipi di formato. Per altre informazioni, vedere [Conversione del formato con Direct3D 10.1](/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-block-compression#format-conversion-using-direct3d-101).

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

CopySubresourceRegion è una chiamata asincrona, che può essere aggiunta alla coda del buffer dei comandi, questo tentativo di rimuovere gli stalli della pipeline che possono verificarsi durante la copia dei dati. Per altre informazioni sugli stalli della pipeline, vedere Considerazioni sulle prestazioni.

NotaSi applica solo al livello di funzionalità 9_x hardware Se si usa ID3D11DeviceContext::UpdateSubresource o CopySubresourceRegion per copiare da una risorsa di staging a una risorsa predefinita, è possibile danneggiare il contenuto della destinazione. Ciò si verifica se si passa una casella di origine NULL e se la risorsa di origine ha dimensioni diverse rispetto a quelle della risorsa di destinazione o se si usano offset di destinazione, (x, y e z). In questa situazione, passare sempre una casella di origine che rappresenta la dimensione completa della risorsa di origine.
 
NotaSi applica solo al livello di funzionalità 9_x hardware Non è possibile usare CopySubresourceRegion per copiare trame di volumi mipmapped.
 
NotaSi applica solo ai livelli di funzionalità 9_x Sottoresource creati con il flag D3D11_BIND_DEPTH_STENCIL può essere usato solo come origine per CopySubresourceRegion.
 
Nota Se si usa CopySubresourceRegion con un buffer depth-stencil o una risorsa multisampled, è necessario copiare l'intera sottoresource. In questa situazione, è necessario passare 0 ai parametri DstX, DstY e DstZ e NULL al parametro pSrcBox. Inoltre, le risorse di origine e di destinazione, rappresentate 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 (10.20),(90.140) in una trama di destinazione.
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 );

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

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione d3d11.h
Libreria D3D11.lib

Vedi anche

ID3D11DeviceContext

ID3D11Resource