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
Índice de sub-fonte de destino.
[in] DstX
A coordenada x do canto superior esquerdo da região de destino.
[in] DstY
A coordenada y do canto superior esquerdo da região de destino. Para uma sub-fonte 1D, isso deve ser zero.
[in] DstZ
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
Í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.
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 |