다음을 통해 공유


ID3D11DeviceContext::CopySubresourceRegion 메서드(d3d11.h)

원본 리소스에서 대상 리소스로 지역을 복사합니다.

통사론

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
);

매개 변수

[in] pDstResource

형식: ID3D11Resource*

대상 리소스에 대한 포인터입니다(id3D11Resource참조).

[in] DstSubresource

형식: UINT

대상 하위 리소스 인덱스입니다.

[in] DstX

형식: UINT

대상 영역의 왼쪽 위 모퉁이에 대한 x 좌표입니다.

[in] DstY

형식: UINT

대상 영역의 왼쪽 위 모퉁이에 대한 y 좌표입니다. 1D 하위 리소스의 경우 0이어야 합니다.

[in] DstZ

형식: UINT

대상 영역의 왼쪽 위 모퉁이에 대한 z 좌표입니다. 1D 또는 2D 하위 리소스의 경우 0이어야 합니다.

[in] pSrcResource

형식: ID3D11Resource*

원본 리소스에 대한 포인터입니다(ID3D11Resource참조).

[in] SrcSubresource

형식: UINT

원본 하위 리소스 인덱스입니다.

[in, optional] pSrcBox

형식: const D3D11_BOX*

복사할 수 있는 원본 하위 리소스를 정의하는 3D 상자(D3D11_BOX참조)에 대한 포인터입니다. NULL전체 원본 하위 리소스가 복사됩니다. 상자는 원본 리소스 내에 있어야 합니다.

빈 상자가 있으면 no-op. 위쪽 값이 아래쪽 값보다 크거나 같거나 왼쪽 값이 오른쪽 값보다 크거나 같거나 앞면 값이 뒤 값보다 크거나 같은 경우 상자가 비어 있습니다. 상자가 비어 있으면 copySubresourceRegion 복사 작업을 수행하지 않습니다.

반환 값

없음

발언

원본 상자는 원본 리소스의 크기 내에 있어야 합니다. 대상 오프셋(x, y 및 z)을 사용하면 대상 리소스에 쓸 때 원본 상자를 오프셋할 수 있습니다. 그러나 원본 상자와 오프셋의 크기는 리소스 크기 내에 있어야 합니다. 대상 리소스 외부에서 복사하거나 원본 리소스보다 큰 원본 상자를 지정하는 경우 CopySubresourceRegion 동작이 정의되지 않습니다. 디버그 계층지원하는 디바이스를 만든 경우 디버그 출력은 이 잘못된 CopySubresourceRegion 호출에 대한 오류를 보고합니다. CopySubresourceRegion 매개 변수가 잘못되어 정의되지 않은 동작이 발생하고 렌더링 디바이스가 잘못 렌더링, 클리핑, 복사 또는 제거될 수 있습니다.

리소스가 버퍼인 경우 모든 좌표는 바이트 단위입니다. 리소스가 텍스처이면 모든 좌표가 텍셀로 표시됩니다. D3D11CalcSubresource 하위 리소스 인덱스를 계산하기 위한 도우미 함수입니다.

CopySubresourceRegion GPU에서 복사를 수행합니다(CPU의 memcpy와 유사). 결과적으로 원본 및 대상 리소스는 다음과 같습니다.

  • 다른 하위 리소스여야 합니다(동일한 리소스에서 온 것일 수 있지만).
  • 동일한 형식이어야 합니다.
  • 호환되는 DXGI 형식(동일하거나 동일한 형식 그룹의 형식)이 있어야 합니다. 예를 들어 이러한 형식은 모두 DXGI_FORMAT_R32G32B32_TYPELESS 그룹에 있으므로 DXGI_FORMAT_R32G32B32_FLOAT 텍스처를 DXGI_FORMAT_R32G32B32_UINT 텍스처에 복사할 수 있습니다. CopySubresourceRegion 몇 가지 형식 간에 복사할 수 있습니다. 자세한 내용은 Direct3D 10.1사용하여 형식 변환을 참조하세요.
  • 현재 매핑되지 않을 수 있습니다.

CopySubresourceRegion 복사만 지원합니다. 스트레치, 색 키 또는 혼합을 지원하지 않습니다. CopySubresourceRegion 몇 가지 형식 형식 간에 리소스 데이터를 재해석할 수 있습니다. 자세한 내용은 Direct3D 10.1사용하여 형식 변환을 참조하세요.

앱에서 전체 리소스를 복사해야 하는 경우 ID3D11DeviceContext::CopyResource 대신 사용하는 것이 좋습니다.

CopySubresourceRegion 명령 버퍼 큐에 추가될 수 있는 비동기 호출이므로 데이터를 복사할 때 발생할 수 있는 파이프라인 중단을 제거하려고 시도합니다. 파이프라인 중단에 대한 자세한 내용은성능 고려 사항을 참조하세요.

참고기능 수준 9_x 하드웨어에만 적용됩니다ID3D11DeviceContext::UpdateSubresource 또는 CopySubresourceRegion 사용하여 준비 리소스에서 기본 리소스로 복사하는 경우 대상 콘텐츠를 손상시킬 수 있습니다. 이 문제는 NULL 원본 상자를 전달하고 원본 리소스의 차원이 대상 리소스의 차원과 다르거나 대상 오프셋(x, y 및 z)을 사용하는 경우에 발생합니다. 이 경우 항상 원본 리소스의 전체 크기인 원본 상자를 전달합니다.
 
참고기능 수준 9_x 하드웨어에만 적용됩니다CopySubresourceRegion 사용하여 mipmapped 볼륨 텍스처를 복사할 수 없습니다.
 
참고D3D11_BIND_DEPTH_STENCIL 플래그로 만든 하위 리소스는 CopySubresourceRegion원본으로만 사용할 수 9_x 기능 수준에만 적용됩니다.
 
참고 깊이 스텐실 버퍼 또는 다중 샘플링된 리소스와 함께 CopySubresourceRegion 사용하는 경우 전체 하위 리소스를 복사해야 합니다. 이 경우 DstX, DstYDstZ 매개 변수에 0을 전달하고 pSrcBox 매개 변수에 NULL 합니다. 또한 pSrcResourcepDstResource 매개 변수로 표현되는 원본 및 대상 리소스에는 동일한 샘플 개수 값이 있어야 합니다.
 

예제

다음 코드 조각은 원본 텍스처의 상자(120,100),(200,220))를 대상 텍스처의 영역(10,20),(90,140)으로 복사합니다.
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 );

2D 텍스처의 경우 앞뒤는 각각 0과 1로 설정됩니다.

요구 사항

요구
대상 플랫폼 Windows
헤더 d3d11.h
라이브러리 D3D11.lib

참고 항목

ID3D11DeviceContext

ID3D11Resource