Método ID3D10Device::CopySubresourceRegion (d3d10.h)

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

Sintaxe

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

Parâmetros

[in] pDstResource

Tipo: ID3D10Resource*

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

[in] DstSubresource

Tipo: UINT

Índice de sub-recurso do 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.

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

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

[in] SrcSubresource

Tipo: UINT

Índice de sub-recurso da origem.

[in] pSrcBox

Tipo: const D3D10_BOX*

Uma caixa 3D (consulte D3D10_BOX) que define o sub-recurso de origem que pode ser copiado. Se FOR 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 se o valor esquerdo for maior ou igual ao valor à direita ou se 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. O local de destino é um valor absoluto (não um valor relativo). O local de destino pode ser deslocado do local de origem; no entanto, o tamanho da região a ser copiada (incluindo o local de destino) deve caber no recurso de destino.

Se os recursos forem buffers, todas as coordenadas estarão em bytes; se os recursos forem texturas, todas as coordenadas estarão em texels.

D3D10CalcSubresource é uma função auxiliar para calcular índices de sub-recursos.

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

  • Devem ser sub-recursos diferentes (embora possam ser do mesmo recurso).
  • Deve ser do mesmo tipo.
  • Deve ter formatos compatíveis (os formatos devem ser idênticos ou ser do mesmo grupo de tipos). Por exemplo, uma textura DXGI_FORMAT_R32G32B32_FLOAT pode ser copiada para uma textura DXGI_FORMAT_R32G32B32_UINT porque ambos os formatos estão no grupo DXGI_FORMAT_R32G32B32_TYPELESS. A partir do Direct3D 10.1, 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 conversões de alongamento, chave de cor, mesclagem ou formato. A partir do Direct3D 10.1, CopySubresourceRegion pode reinterpretar os dados de 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 ID3D10Device::CopyResource .

CopySubresourceRegion é uma chamada assíncrona que o runtime pode adicionar à fila de buffer de comando. Esse comportamento assíncronoattempts para remover paralisações de pipeline que podem ocorrer ao copiar dados. Confira considerações de desempenho para obter mais detalhes.

Diferenças entre o Direct3D 10 e o Direct3D 10.1:

O Direct3D 10 tem as seguintes limitações:

  • Não é possível usar um recurso de estêncil de profundidade como destino.
  • Você não pode usar um recurso imutável como destino.
  • Você não pode usar uma textura multisampled como uma origem ou um destino
O Direct3D 10.1 adicionou suporte para os seguintes recursos:
  • Você pode usar um buffer de estêncil de profundidade como origem ou destino.
  • Você pode usar recursos multisampled como origem e destino somente se a origem e o destino tiverem uma contagem e uma qualidade idênticas. Se a origem e o destino forem diferentes na contagem e na qualidade multisampledas ou se a origem for multisampled e o destino não for multisampled (ou vice-versa), a chamada para ID3D10Device::CopySubresourceRegion falhará.
  • Você pode copiar entre recursos descompactados e compactados. Durante a cópia, as conversões de formato especificadas na Conversão de Formato usando o Direct3D 10.1 são compatíveis automaticamente. O recurso descompactado deve ser pelo menos pré-estruturado e digitado. Você também deve considerar a diferença entre o tamanho virtual e físico dos níveis de mipmaps.
 
Nota Se você usar CopySubresourceRegion com um buffer de estêncil de profundidade ou um recurso com várias amostras, deverá copiar todo o sub-recurso. Você também 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 , respectivamente, 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 para uma região (130.120)(210.240) em uma textura de destino.

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

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

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho d3d10.h
Biblioteca D3D10.lib

Confira também

ID3D10Device

ID3D10Resource Interface