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-fonte 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 uma sub-fonte 1D, isso deve ser zero.

[in] DstZ

Tipo: UINT

A coordenada z do canto superior esquerdo da região de destino. Para uma sub-fonte 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, toda a sub-fonte de origem será copiada. A caixa deve caber dentro do recurso de origem.

Uma caixa vazia resulta em um no-op. Uma caixa estará vazia se o valor superior for maior ou igual ao valor inferior ou se 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 estiver vazia, CopySubresourceRegion não executará uma operação de cópia.

Valor de retorno

Nenhum

Observações

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 dos 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 de 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.
  • Pode não estar mapeado no momento.

CopySubresourceRegion dá suporte apenas à cópia; ele não dá suporte a qualquer alongamento, chave de cor ou mesclagem. CopySubresourceRegion pode reinterpretar os dados do recurso entre alguns tipos de formato. Para obter mais informações, consulte Conversão de formato usando o Direct3D 10.1.

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

CopySubresourceRegion é uma chamada assíncrona, que pode ser adicionada à fila de buffer de comandos, isso 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 de hardware se você usar ID3D11DeviceContext::UpdateSubresource ou CopySubresourceRegion para copiar de um recurso de preparo para um recurso padrão, você pode corromper o conteúdo de destino. Isso ocorre se você passar uma caixa de origem NULL e se o recurso de origem tiver dimensões diferentes das 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 seja do tamanho total do recurso de origem.
 
Observaçãoaplica-se somente ao nível do recurso 9_x de hardware Não é possível 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ó pode ser usado como uma origem para CopySubresourceRegion.
 
Observação Se você usar CopySubresourceRegion com um buffer de estêncil de profundidade ou um recurso multisampado, você deverá copiar todo o sub-recurso. Nessa situação, você deve passar 0 para os parâmetros DstX, DstYe parâmetros de DstZ e NULL para o parâmetro pSrcBox. Além disso, os recursos de origem e destino, representados pelos parâmetros pSrcResource e pDstResource, devem ter valores de contagem de exemplo idênticos.
 

Exemplo de

O snippet de código a seguir copia uma caixa (localizada em (120.100),(200.220)) de uma textura de origem para 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
da Plataforma de Destino Windows
cabeçalho d3d11.h
biblioteca D3D11.lib

Consulte também

ID3D11DeviceContext

ID3D11Resource