Compartir a través de


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 de

Índice de subrecurso de destino.

[in] DstX

Tipo: UINT de

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

[in] DstY

Tipo: UINT de

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

[in] DstZ

Tipo: UINT de

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 de

Í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 NULL, se copia todo el subrecurso de origen. El cuadro debe caber en el recurso de origen.

Un cuadro vacío da como resultado un no-op. 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

Ninguno

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 creó un dispositivo que admite el capa de depuración, la salida de depuración notifica un error en esta llamada a CopySubresourceRegion no válida . Los parámetros no válidos para 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:

  • Debe ser diferentes subrecursos (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 de 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 mediante Direct3D 10.1.

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.

NotaSe aplica solo al nivel de característica 9_x hardware Si usa ID3D11DeviceContext::UpdateSubresource o CopySubresourceRegion para copiar desde un recurso de almacenamiento provisional en un recurso predeterminado, puede dañar el contenido de destino. Esto ocurre si se 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, pase siempre un cuadro de origen que sea el tamaño completo del recurso de origen.
 
NotaSe aplica solo al nivel de característica 9_x hardware No se puede usar CopySubresourceRegion para copiar texturas de volumen mipmapped.
 
NotaSe aplica solo 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, DstYy DstZ parámetros y NULL al parámetro pSrcBox. Además, los recursos de origen y destino, representados por el pSrcResource y parámetros pDstResource, deben tener valores de recuento de muestras idénticos.
 

Ejemplo de

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, frontal y posterior se establecen en 0 y 1 respectivamente.

Requisitos

Requisito Valor
de la plataforma de destino de Windows
encabezado de d3d11.h
biblioteca de D3D11.lib

Consulte también

ID3D11DeviceContext

ID3D11Resource