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