다음을 통해 공유


ID3D10Device::CopySubresourceRegion 메서드(d3d10.h)

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

구문

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

매개 변수

[in] pDstResource

형식: ID3D10Resource*

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

[in] DstSubresource

형식: UINT

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

[in] DstX

형식: UINT

대상 영역의 왼쪽 위 모서리에 있는 x 좌표입니다.

[in] DstY

형식: UINT

대상 영역의 왼쪽 위 모서리에 있는 y 좌표입니다.

[in] DstZ

형식: UINT

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

[in] pSrcResource

형식: ID3D10Resource*

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

[in] SrcSubresource

형식: UINT

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

[in] pSrcBox

형식: const D3D10_BOX*

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

빈 상자가 표시되어 작업 없음이 발생합니다. 위쪽 값이 아래쪽 값보다 크거나 같거나 왼쪽 값이 오른쪽 값보다 크거나 같거나 앞 값이 뒤 값보다 크거나 같은 경우 상자가 비어 있습니다. 상자가 비어 있으면 CopySubresourceRegion 에서 복사 작업을 수행하지 않습니다.

반환 값

없음

설명

원본 상자는 원본 리소스의 크기 내에 있어야 합니다. 대상 위치는 절대 값(상대 값이 아님)입니다. 대상 위치는 원본 위치에서 오프셋될 수 있습니다. 그러나 복사할 지역 크기(대상 위치 포함)는 대상 리소스에 맞아야 합니다.

리소스가 버퍼인 경우 모든 좌표는 바이트 단위입니다. 리소스가 텍스처이면 모든 좌표가 텍셀에 있습니다.

D3D10CalcSubresource 는 하위 리소스 인덱스를 계산하기 위한 도우미 함수입니다.

CopySubresourceRegion 은 GPU에서 복사를 수행합니다(CPU의 memcpy와 유사). 따라서 원본 및 대상 리소스는 다음 조건을 충족해야 합니다.

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

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

CopySubresourceRegion 은 런타임이 명령 버퍼 큐에 추가할 수 있는 비동기 호출입니다. 이 비동기 동작은 데이터를 복사할 때 발생할 수 있는 파이프라인 중단을 제거하기 위한 것입니다. 자세한 내용은 성능 고려 사항을 참조하세요.

Direct3D 10과 Direct3D 10.1 간의 차이점:

Direct3D 10에는 다음과 같은 제한 사항이 있습니다.

  • 깊이 스텐실 리소스를 대상으로 사용할 수 없습니다.
  • 변경할 수 없는 리소스를 대상으로 사용할 수 없습니다.
  • 다중 샘플링된 텍스처를 원본 또는 대상으로 사용할 수 없습니다.
Direct3D 10.1은 다음 기능에 대한 지원을 추가했습니다.
  • 깊이 스텐실 버퍼를 원본 또는 대상으로 사용할 수 있습니다.
  • 원본 및 대상 모두 다중 샘플링 수와 품질이 동일한 경우에만 다중 샘플링된 리소스를 원본 및 대상으로 사용할 수 있습니다. 원본과 대상이 다중 샘플링된 개수와 품질이 다르거나 원본이 다중 샘플링되고 대상이 다중 샘플링되지 않은 경우(또는 그 반대의 경우) ID3D10Device::CopySubresourceRegion 에 대한 호출이 실패합니다.
  • 압축되지 않은 리소스와 압축된 리소스 간에 복사할 수 있습니다. 복사하는 동안 Direct3D 10.1을 사용하여 형식 변환에 지정된 형식 변환 이 자동으로 지원됩니다. 압축되지 않은 리소스는 적어도 사전 구조화되고 입력되어야 합니다. 또한 가상과 Mipmap 수준의 물리적 크기 간의 차이점을 고려해야 합니다.
 
참고 깊이 스텐실 버퍼 또는 다중 샘플링된 리소스와 함께 CopySubresourceRegion 을 사용하는 경우 전체 하위 리소스를 복사해야 합니다. 또한 0을 DstX, DstY 및 DstZ 매개 변수에 전달하고 NULLpSrcBox 매개 변수에 전달해야 합니다. 또한 pSrcResourcepDstResource 매개 변수로 각각 표시되는 원본 및 대상 리소스에는 동일한 샘플 개수 값이 있어야 합니다.
 

예제

다음 코드 조각은 원본 텍스처에서 대상 텍스처의 영역(130,120),(210,240)에 있는 상자(120,100),(200,220))를 복사합니다.

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

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

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 d3d10.h
라이브러리 D3D10.lib

추가 정보

ID3D10Device

ID3D10Resource 인터페이스