Compartir a través de


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

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

Sintaxis

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*

Puntero al recurso de destino (consulte ID3D10Resource).

[in] DstSubresource

Tipo: UINT

Índice de subrecurso del 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.

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

Puntero al recurso de origen (consulte ID3D10Resource).

[in] SrcSubresource

Tipo: UINT

Índice de subrecurso del origen.

[in] pSrcBox

Tipo: const D3D10_BOX*

Cuadro 3D (vea D3D10_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. La ubicación de destino es un valor absoluto (no un valor relativo). La ubicación de destino se puede desplazar desde la ubicación de origen; sin embargo, el tamaño de la región que se va a copiar (incluida la ubicación de destino) debe caber en el recurso de destino.

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.

D3D10CalcSubresource 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 cumplir los siguientes criterios:

  • Deben ser subrecursos diferentes (aunque pueden ser del mismo recurso).
  • Debe ser el mismo tipo.
  • Debe tener formatos compatibles (los formatos deben ser idénticos o ser 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 porque ambos formatos están en el grupo DXGI_FORMAT_R32G32B32_TYPELESS. A partir de Direct3D 10.1, 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 conversiones de extensión, tecla de color, mezcla o formato. A partir de Direct3D 10.1, 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.

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

CopySubresourceRegion es una llamada asincrónica que el tiempo de ejecución puede agregar a la cola de búfer de comandos. Este comportamiento asincrónico intenta quitar los puestos de canalización que pueden producirse al copiar datos. Consulte consideraciones de rendimiento para obtener más detalles.

Diferencias entre Direct3D 10 y Direct3D 10.1:

Direct3D 10 tiene las siguientes limitaciones:

  • No se puede usar un recurso de galería de símbolos de profundidad como destino.
  • No se puede usar un recurso inmutable como destino.
  • No se puede usar una textura de muestreo múltiple como origen o destino
Direct3D 10.1 ha agregado compatibilidad con las siguientes características:
  • Puede usar un búfer de galería de símbolos de profundidad como origen o destino.
  • Puede usar recursos multimuestreo como origen y destino solo si tanto el origen como el destino tienen un recuento y una calidad multimuestreo idénticos. Si el origen y el destino difieren en el recuento y la calidad multimuestreo o si el origen es multimuestreo y el destino no es multimuestreo (o viceversa), se produce un error en la llamada a ID3D10Device::CopySubresourceRegion .
  • Puede copiar entre recursos sin comprimir y comprimidos. Durante la copia, las conversiones de formato especificadas en Conversión de formato mediante Direct3D 10.1 se admiten automáticamente. El recurso sin comprimir debe estar al menos preestructurado y escribirse. También debe tener en cuenta la diferencia entre el tamaño virtual y físico de los niveles de mapas MIP.
 
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. Tambié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 , respectivamente, 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 (130 120),(210 240) en una 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 );

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

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado d3d10.h
Library D3D10.lib

Consulte también

ID3D10Dispositivo

Id3D10Resource (interfaz)