Compartilhar via


Método ID3D11DeviceContext::CopySubresourceRegion (d3d11.h)

Copie uma região de um recurso de origem para um recurso de destino.

Sintaxe

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

Parâmetros

[in] pDstResource

Tipo: ID3D11Resource*

Um ponteiro para o recurso de destino (consulte ID3D11Resource).

[in] DstSubresource

Tipo: UINT

Índice de sub-recursos de destino.

[in] DstX

Tipo: UINT

A coordenada x do canto superior esquerdo da região de destino.

[in] DstY

Tipo: UINT

A coordenada y do canto superior esquerdo da região de destino. Para um sub-recurso 1D, isso deve ser zero.

[in] DstZ

Tipo: UINT

A coordenada z do canto superior esquerdo da região de destino. Para um sub-recurso 1D ou 2D, isso deve ser zero.

[in] pSrcResource

Tipo: ID3D11Resource*

Um ponteiro para o recurso de origem (consulte ID3D11Resource).

[in] SrcSubresource

Tipo: UINT

Índice de sub-fonte de origem.

[in, optional] pSrcBox

Tipo: const D3D11_BOX*

Um ponteiro para uma caixa 3D (consulte D3D11_BOX) que define o sub-recurso de origem que pode ser copiado. Se NULL, todo o sub-recurso de origem será copiado. A caixa deve caber dentro do recurso de origem.

Uma caixa vazia resulta em uma no-op. Uma caixa estará vazia se o valor superior for maior ou igual ao valor inferior ou o valor esquerdo for maior ou igual ao valor à direita ou o valor frontal for maior ou igual ao valor de fundo. Quando a caixa está vazia, CopySubresourceRegion não executa uma operação de cópia.

Retornar valor

Nenhum

Comentários

A caixa de origem deve estar dentro do tamanho do recurso de origem. Os deslocamentos de destino , (x, y e z), permitem que a caixa de origem seja deslocada ao gravar no recurso de destino; no entanto, as dimensões da caixa de origem e os deslocamentos devem estar dentro do tamanho do recurso. Se você tentar copiar fora do recurso de destino ou especificar uma caixa de origem maior que o recurso de origem, o comportamento de CopySubresourceRegion será indefinido. Se você criou um dispositivo que dá suporte à camada de depuração, a saída de depuração relatará um erro nesta chamada CopySubresourceRegion inválida. Parâmetros inválidos para CopySubresourceRegion causam comportamento indefinido e podem resultar em renderização incorreta, recorte, nenhuma cópia ou até mesmo a remoção do dispositivo de renderização.

Se os recursos forem buffers, todas as coordenadas estarão em bytes; se os recursos forem texturas, todas as coordenadas estarão em texels. D3D11CalcSubresource é uma função auxiliar para calcular índices de sub-fonte.

CopySubresourceRegion executa a cópia na GPU (semelhante a um memcpy da CPU). Como consequência, os recursos de origem e destino:

  • Devem ser sub-recursos diferentes (embora possam ser do mesmo recurso).
  • Deve ser do mesmo tipo.
  • Deve ter formatos DXGI compatíveis (idênticos ou do mesmo grupo de tipos). Por exemplo, uma textura DXGI_FORMAT_R32G32B32_FLOAT pode ser copiada para uma textura DXGI_FORMAT_R32G32B32_UINT, pois ambos os formatos estão no grupo DXGI_FORMAT_R32G32B32_TYPELESS. CopySubresourceRegion pode copiar entre alguns tipos de formato. Para obter mais informações, consulte Conversão de formato usando o Direct3D 10.1.
  • Talvez não esteja mapeado no momento.
**CopySubresourceRegion** só dá suporte à cópia; ele não dá suporte a qualquer alongamento, chave de cor ou mesclagem. **CopySubresourceRegion** pode reinterpretar os dados de recurso entre alguns tipos de formato. Para obter mais informações, consulte [Conversão de formato usando Direct3D 10.1](/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-block-compression#format-conversion-using-direct3d-101).

Se o aplicativo precisar copiar um recurso inteiro, recomendamos usar ID3D11DeviceContext::CopyResource .

CopySubresourceRegion é uma chamada assíncrona, que pode ser adicionada à fila de buffer de comando, que tenta remover as paradas de pipeline que podem ocorrer ao copiar dados. Para obter mais informações sobre estações de pipeline, consulte considerações de desempenho.

ObservaçãoAplica-se somente ao nível do recurso 9_x hardware Se você usar ID3D11DeviceContext::UpdateSubresource ou CopySubresourceRegion para copiar de um recurso de preparo para um recurso padrão, poderá corromper o conteúdo de destino. Isso ocorrerá se você passar uma caixa de origem NULL e se o recurso de origem tiver dimensões diferentes daquelas do recurso de destino ou se você usar deslocamentos de destino (x, y e z). Nessa situação, sempre passe uma caixa de origem que tenha o tamanho total do recurso de origem.
 
ObservaçãoAplica-se somente ao nível do recurso 9_x hardware Você não pode usar CopySubresourceRegion para copiar texturas de volume mipmapped.
 
ObservaçãoAplica-se somente aos níveis de recursos 9_x sub-recursos criados com o sinalizador D3D11_BIND_DEPTH_STENCIL só podem ser usados como uma fonte para CopySubresourceRegion.
 
Nota Se você usar CopySubresourceRegion com um buffer de estêncil de profundidade ou um recurso multisampled, você deverá copiar todo o sub-recurso. Nessa situação, você deve passar 0 para os parâmetros DstX, DstY e DstZ e NULL para o parâmetro pSrcBox . Além disso, os recursos de origem e destino, que são representados pelos parâmetros pSrcResource e pDstResource , devem ter valores de contagem de exemplo idênticos.
 

Exemplo

O snippet de código a seguir copia uma caixa (localizada em (120.100),(200.220)) de uma textura de origem em uma região (10,20)(90.140) em uma textura de destino.
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 );

Observe que, para uma textura 2D, front e back são definidos como 0 e 1, respectivamente.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho d3d11.h
Biblioteca D3D11.lib

Confira também

ID3D11DeviceContext

ID3D11Resource