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