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

Copie una región de un recurso de origen en un recurso de destino.

Sintaxis

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*

Puntero al recurso de destino (consulte ID3D11Resource).

[in] DstSubresource

Tipo: UINT

Índice de subrecurso de destino.

[in] DstX

Tipo: UINT

Coordenada x de la esquina superior izquierda de la región de destino.

[in] DstY

Tipo: UINT

Coordenada y de la esquina superior izquierda de la región de destino. Para un subrecurso 1D, debe ser cero.

[in] DstZ

Tipo: UINT

Coordenada z de la esquina superior izquierda de la región de destino. Para un subrecurso 1D o 2D, debe ser cero.

[in] pSrcResource

Tipo: ID3D11Resource*

Puntero al recurso de origen (consulte ID3D11Resource).

[in] SrcSubresource

Tipo: UINT

Índice de subrecurso de origen.

[in, optional] pSrcBox

Tipo: const D3D11_BOX*

Puntero a un cuadro 3D (vea D3D11_BOX) que define el subrecurso de origen que se puede copiar. Si es NULL, se copia todo el subrecurso de origen. El cuadro debe caber en el recurso de origen.

Un cuadro vacío da como resultado una operación sin operación. Un cuadro está vacío si el valor superior es mayor o igual que el valor inferior, o el valor izquierdo es mayor o igual que el valor derecho, o el valor frontal es mayor o igual que el valor posterior. Cuando el cuadro está vacío, CopySubresourceRegion no realiza una operación de copia.

Valor devuelto

None

Observaciones

El cuadro de origen debe estar dentro del tamaño del recurso de origen. Los desplazamientos de destino, (x, y y z), permiten que el cuadro de origen se desfase al escribir en el recurso de destino; sin embargo, las dimensiones del cuadro de origen y los desplazamientos deben estar dentro del tamaño del recurso. Si intenta copiar fuera del recurso de destino o especifica un cuadro de origen mayor que el recurso de origen, el comportamiento de CopySubresourceRegion no está definido. Si ha creado un dispositivo que admite la capa de depuración, la salida de depuración notifica un error en esta llamada copySubresourceRegion no válida. Los parámetros no válidos de CopySubresourceRegion provocan un comportamiento indefinido y pueden dar lugar a una representación incorrecta, recorte, sin copia o incluso la eliminación del dispositivo de representación.

Si los recursos son búferes, todas las coordenadas están en bytes; Si los recursos son texturas, todas las coordenadas están en elementos de textura. D3D11CalcSubresource es una función auxiliar para calcular índices de subrecursos.

CopySubresourceRegion realiza la copia en la GPU (similar a un memcpy por la CPU). Como consecuencia, los recursos de origen y destino:

  • Deben ser subrecursos diferentes (aunque pueden ser del mismo recurso).
  • Debe ser el mismo tipo.
  • Debe tener formatos DXGI compatibles (idénticos o del mismo grupo de tipos). Por ejemplo, una textura de DXGI_FORMAT_R32G32B32_FLOAT se puede copiar en una textura de DXGI_FORMAT_R32G32B32_UINT, ya que ambos formatos están en el grupo DXGI_FORMAT_R32G32B32_TYPELESS. CopySubresourceRegion puede copiar entre algunos tipos de formato. Para obtener más información, consulta Conversión de formato con Direct3D 10.1.
  • Es posible que no se asigne actualmente.
**CopySubresourceRegion** solo admite la copia; no admite ningún ajuste, tecla de color ni mezcla. **CopySubresourceRegion** puede reinterpretar los datos de recursos entre algunos tipos de formato. Para obtener más información, consulta [Conversión de formato con Direct3D 10.1](/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-block-compression#format-conversion-using-direct3d-101).

Si la aplicación necesita copiar un recurso completo, se recomienda usar ID3D11DeviceContext::CopyResource en su lugar.

CopySubresourceRegion es una llamada asincrónica, que se puede agregar a la cola de búfer de comandos, lo que intenta quitar los puestos de canalización que pueden producirse al copiar datos. Para más información sobre los puestos de canalización, consulte consideraciones de rendimiento.

NotaSolo se aplica al nivel de característica 9_x hardware Si usa ID3D11DeviceContext::UpdateSubresource o CopySubresourceRegion para copiar desde un recurso de almacenamiento provisional a un recurso predeterminado, puede dañar el contenido de destino. Esto ocurre si pasa un cuadro de origen NULL y si el recurso de origen tiene dimensiones diferentes de las del recurso de destino o si usa desplazamientos de destino, (x, y y z). En esta situación, siempre pase un cuadro de origen que sea el tamaño completo del recurso de origen.
 
NotaSolo se aplica al nivel de característica 9_x hardware No se puede usar CopySubresourceRegion para copiar texturas de volumen mipmapped.
 
NotaSolo se aplica a los niveles de características 9_x subrecursos creados con la marca D3D11_BIND_DEPTH_STENCIL solo se puede usar como origen para CopySubresourceRegion.
 
Nota Si usa CopySubresourceRegion con un búfer de galería de símbolos de profundidad o un recurso de muestreo múltiple, debe copiar todo el subrecurso. En esta situación, debe pasar 0 a los parámetros DstX, DstY y DstZ y NULL al parámetro pSrcBox . Además, los recursos de origen y destino, representados por los parámetros pSrcResource y pDstResource , deben tener valores de recuento de muestras idénticos.
 

Ejemplo

El siguiente fragmento de código copia un cuadro (ubicado en (120 100),(200,220)) de una textura de origen en una región (10 20),(90,140) en una 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 );

Tenga en cuenta que, para una textura 2D, la parte delantera y la parte posterior se establecen en 0 y 1 respectivamente.

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado d3d11.h
Library D3D11.lib

Consulte también

ID3D11DeviceContext

ID3D11Resource