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