IDirect3DDevice9::StretchRect 메서드(d3d9helper.h)

원본 사각형의 내용을 대상 사각형에 복사합니다. 원본 사각형은 복사본으로 확장 및 필터링할 수 있습니다. 이 함수는 비디오 스트림의 가로 세로 비율을 변경하는 데 자주 사용됩니다.

구문

HRESULT StretchRect(
  [in] IDirect3DSurface9    *pSourceSurface,
  [in] const RECT           *pSourceRect,
  [in] IDirect3DSurface9    *pDestSurface,
  [in] const RECT           *pDestRect,
  [in] D3DTEXTUREFILTERTYPE Filter
);

매개 변수

[in] pSourceSurface

형식: IDirect3DSurface9*

원본 표면에 대한 포인터입니다. IDirect3DSurface9를 참조하세요.

[in] pSourceRect

형식: const RECT*

원본 사각형에 대한 포인터입니다. 이 매개 변수에 대한 NULL 을 사용하면 전체 원본 표면이 사용됩니다.

[in] pDestSurface

형식: IDirect3DSurface9*

대상 표면에 대한 포인터입니다. IDirect3DSurface9를 참조하세요.

[in] pDestRect

형식: const RECT*

대상 사각형에 대한 포인터입니다. 이 매개 변수에 대한 NULL 을 사용하면 전체 대상 표면이 사용됩니다.

[in] Filter

형식: D3DTEXTUREFILTERTYPE

필터 형식입니다. 허용되는 값은 D3DTEXF_NONE, D3DTEXF_POINT 또는 D3DTEXF_LINEAR. 자세한 내용은 D3DTEXTUREFILTERTYPE을 참조하세요.

반환 값

형식: HRESULT

메서드가 성공하면 반환 값이 D3D_OK. 메서드가 실패하면 반환 값은 D3DERR_INVALIDCALL 수 있습니다.

설명

StretchRect 제한 사항

  • 드라이버 지원은 다양합니다. 어떤 드라이버가 어떤 원본 및 대상 형식을 지원하는지 확인하려면 드라이버 지원 섹션(아래)을 참조하세요.
  • 원본 및 대상 표면은 기본 메모리 풀에 만들어야 합니다.
  • 필터링을 지정하는 경우 적절한 필터 대문자를 설정해야 합니다( D3DCAPS9의 StretchRectFilterCaps 참조).
  • 동일한 표면의 원본 사각형과 대상 사각형 간에는 스트레칭이 지원되지 않습니다.
  • 대상 표면이 화면 외의 일반 표면이지만 원본이 아닌 경우 스트레칭이 지원되지 않습니다.
  • 두 표면이 압축된 형식인 경우 원본 사각형과 대상 사각형 사이를 확장하지 않는 것이 많습니다(압축된 질감 사용(Direct3D 9 참조)).
  • Stretching은 YUV에서 높은 정밀도 RGBA로만 색 공간 변환을 지원합니다. 색 변환 지원은 소프트웨어 에뮬레이션에서 지원되지 않으므로 IDirect3D9::CheckDeviceFormatConversion 을 사용하여 하드웨어에서 색 변환 지원을 테스트합니다.
  • 원본 또는 대상 표면이 텍스처 표면(또는 큐브 텍스처 표면)인 경우 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 지원하는 Direct3D 9 드라이버를 사용해야 합니다( D3DDEVCAPS2 참조).
깊이 및 스텐실 표면에 대한 추가 제한 사항
  • 원본 및 대상 표면은 텍스처가 아닌 일반 깊이 스텐실 표면이어야 합니다( IDirect3DDevice9::CreateDepthStencilSurface 참조).
  • 두 표면 모두 삭제할 수 없습니다.
  • 전체 표면을 복사해야 합니다(즉, 하위 사각형 복사본은 허용되지 않음).
  • 형식 변환, 늘이기 및 축소는 지원되지 않습니다.
  • StretchRect는 BeginScene/EndScene 쌍 내에서 호출할 수 없습니다.
StretchRect를 사용하여 다중 샘플 Rendertarget 다운샘플

StretchRect를 사용하여 렌더 대상에서 다른 렌더 대상으로 복사할 수 있습니다. 원본 rendertarget이 다중 샘플링되면 원본 rendertarget이 다운샘플링됩니다. instance 경우 다음을 수행할 수 있습니다.

  • 다중 샘플링된 rendertarget을 만듭니다.
  • 다중 샘플링되지 않은 동일한 크기의 두 번째 rendertarget을 만듭니다.
  • 복사(StretchRect를 사용하여 다중 샘플 rendertarget을 두 번째 rendertarget에 복사합니다.
StretchRect를 사용하여 다중 샘플 Rendertarget을 다운샘플하는 데 관련된 추가 표면을 사용하면 성능이 저하됩니다.

드라이버 지원

StretchRect에 유효한 표면 조합에 대한 많은 제한 사항이 있습니다. 요인에는 드라이버가 Direct3D 9 드라이버인지 또는 이전 드라이버인지 여부와 연산으로 인해 늘어나거나 축소되는지 여부가 포함됩니다. 애플리케이션은 드라이버가 Direct3D 9 드라이버인지 여부를 인식할 수 없으므로 런타임은 Direct3D 9 수준 드라이버 이상에 대해 새 상한 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 상한( D3DDEVCAPS2 참조)을 자동으로 설정합니다.

DirectX 8 드라이버(늘어나지 않음)
Dest 형식
질감 RT 텍스처 RT 화면 플레인
Src 형식 질감
RT 텍스처 Yes
RT Yes
화면 플레인 Yes Yes Yes Yes
 
DirectX 8 드라이버(스트레칭)
Dest 형식
질감 RT 텍스처 RT 화면 플레인
Src 형식 질감
RT 텍스처
RT Yes
오프 스크린 플레인 Yes
 
Direct3D 9 드라이버(늘어나지 않음)
Dest 형식
질감 RT 텍스처 RT 오프 스크린 플레인
Src 형식 질감 Yes
RT 텍스처 Yes
RT Yes
오프 스크린 플레인 Yes Yes
 
Direct3D 9 드라이버(스트레칭)
Dest 형식
질감 RT 텍스처 RT 오프 스크린 플레인
Src 형식 질감 Yes
RT 텍스처 Yes
RT Yes
오프 스크린 플레인 Yes

요구 사항

   
대상 플랫폼 Windows
헤더 d3d9helper.h(D3D9.h 포함)
라이브러리 D3D9.lib

추가 정보

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene