DirectX Graphics 레퍼런스 Direct3D C/C++ 레퍼런스 인터페이스 IDirect3DDevice9 StretchRect [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
전송원직사각형의 내용을 목적지 직사각형에 복사 한다. 복사에 의해, 전송원직사각형을 확대 및 필터링 할 수 있다. 이 함수는, 비디오 스트림의 어스펙트비(가로세로 비율)의 변경에 자주(잘) 사용된다.
구문
HRESULT StretchRect(
IDirect3DSurface9 *pSourceSurface, CONST RECT *pSourceRect, IDirect3DSurface9 *pDestSurface, CONST RECT *pDestRect, D3DTEXTUREFILTERTYPE Filter );
파라미터
- pSourceSurface
- [in] 전송원표면의 포인터. 「IDirect3DSurface9 」를 참조할것.
- pSourceRect
- [in] 전송원직사각형의 포인터. 이 파라미터에 NULL 를 지정 하면, 전송원표면 전체가 사용된다.
- pDestSurface
- [in] 목적지 표면의 포인터. 「IDirect3DSurface9 」를 참조할것.
- pDestRect
- [in] 목적지 직사각형의 포인터. 이 파라미터에 NULL 를 지정 하면, 목적지 표면 전체가 사용된다.
- Filter
- [in] 필터 타입. 지정 가능한 값은, D3DTEXF_NONE, D3DTEXF_POINT, 또는 D3DTEXF_LINEAR 이다. 더 자세한 정보는, 「D3DTEXTUREFILTERTYPE 」를 참조할것.
반환값
성공했을 경우는,D3D_OK 를 돌려준다.
실패했을 경우의 반환값은 다음대로.
D3DERR_INVALIDCALL 메서드의 호출이 무효이다. 예를 들어, 메서드의 파라미터에 무효인 값이 설정되어 있는 경우 등이다.
주의
일반적인 제한
IDirect3DDevice9::StretchRect 로 유효한 표면의 편성에는, 다양한 제한이 있다. 제한의 요인에는, 드라이버가 Microsoft® DirectX® 9.0 드라이버인가 또는 그 이전의 것인지, 또 조작에 의해 확대/축소의 어느 쪽이 발생할까 등이 포함된다. 애플리케이션측에서는 드라이버가 DirectX 9.0 일지 어떨지는 인식하지 않기 때문에, DirectX 9.0 레벨 이상의 드라이버에 대해서는, Microsoft Direct3D® 는 자동적으로 새로운 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 능력을 D3DDEVCAPS2 구조 체내에서 설정한다.
DirectX 8. x 드라이버 (확대 없음)
목적지 포맷 텍스처 RT 텍스처 RT 단순한 오프 스크린 전송원포맷 텍스처 아니오 아니오 아니오 아니오 RT 텍스처 아니오 네 네 아니오 RT 아니오 네 네 아니오 단순한 오프 스크린 네 네 네 네 DirectX 8. x 드라이버 (확대 있어)
목적지 포맷 텍스처 RT 텍스처 RT 단순한 오프 스크린 전송원포맷 텍스처 아니오 아니오 아니오 아니오 RT 텍스처 아니오 아니오 아니오 아니오 RT 아니오 네 네 아니오 단순한 오프 스크린 아니오 네 네 아니오 DirectX 9.0 드라이버 (확대 없음)
목적지 포맷 텍스처 RT 텍스처 RT 단순한 오프 스크린 전송원포맷 텍스처 아니오 네 네 아니오 RT 텍스처 아니오 네 네 아니오 RT 아니오 네 네 아니오 단순한 오프 스크린 아니오 네 네 네 DirectX 9.0 드라이버 (확대 있어)
목적지 포맷 텍스처 RT 텍스처 RT 단순한 오프 스크린 전송원포맷 텍스처 아니오 네 네 아니오 RT 텍스처 아니오 네 네 아니오 RT 아니오 네 네 아니오 단순한 오프 스크린 아니오 네 네 아니오 IDirect3DDevice9::StretchRect 에서는, 전송원표면와 목적지 표면의 양쪽 모두가 D3DPOOL_DEFAULT 표면이 아니면 안된다.
필터링을 지정했을 경우,IDirect3DDevice9::StretchRect 는, 드라이버가 D3DCAPS9 로 적절한 StretchRectFilterCaps 를 설정하지 않는 한 실패한다. D3DTEXF_NONE 를 지정했을 경우, 드라이버는 필터링 알고리즘을 선택한다.
확대 조작은, YUV 로부터 고정밀도 RGBA 의 색공간(color space)의 변환만을 지원 하고 있다. 같은 표면 위에의 직사각형간에서의 확대는 지원 되지 않는다. 변환의 소프트웨어 에뮬레이션은 지원 되지 않기 때문에,IDirect3D9::CheckDeviceFormatConversion 를 사용해 하드웨어의 색변환 지원을 테스트할 필요가 있다.
텍스처의 제한
IDirect3DDevice9::StretchRect 는, DirectX 9.0 드라이버 (D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 를 설정하는 드라이버)에서의 텍스처 표면 (또는 큐브 텍스처 표면)에서만 동작한다.깊이 및 스텐실의 제한
깊이 및 스텐실 표면 는,IDirect3DDevice9::StretchRect 를 사용해 복사 할 수 있지만, 다음의 제한이 있다.
- 전송원 및 목적지의 양쪽 모두의 표면을,IDirect3DDevice9::CreateDepthStencilSurface 로 생성 할 필요가 있다. 이것은, 어느쪽이나 텍스처는 아니고 평면 스텐실 표면이 아니면 안되기 때문이다.
- 어느 쪽의 표면도 같은 포맷이 아니면 안된다 (포맷 변환 없음).
- 확대도 축소도 할 수 없다.
- 서브 직사각형의 복사는 허가되지 않는다. 표면 전체를 복사 할 필요가 있다. 즉, pSourceRect 와 pDestRect 가 NULL 또는 표면 전체를 커버하는 직사각형의 포인트가 아니면 안된다.
- IDirect3DDevice9::BeginScene /IDirect3DDevice9::EndScene 페어의 내부에서는 StretchRect 를 호출할 수 없다.
- 전송원 또는 목적지 표면이, D3DUSAGE_DEPTHSTENCIL 로 생성 한 텍스처의 밉레벨 (큐브 텍스처)이어서는 안 된다.
- 어느 쪽의 표면도,"파기 가능" 으로서 생성 해서는 안 된다.
- 드라이버는, D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 를 설정할 필요가 있다. 「D3DDEVCAPS2」를 참조할것.
다음의 몇개의 경우,IDirect3DDevice9::StretchRect 는 실패한다.
- pSourceSurface 와 pDestSurface 가 같은 경우.
- 확대 또는 축소의 어느 쪽인지를 해 어느 쪽인가의 표면이 DXTn 압축 포맷인 경우.
- 전송원표면이 멀티 샘플링 되고 있는 경우 (MultiSampleType != D3DMULTISAMPLE_NONE 로 생성 했을 경우).
- 목적지 표면이 단순한 오프 스크린이면서, 전송원표면이 그렇지 않은 경우. 목적지 표면이 단순한 오프 스크린이며, 확대를 하고 있는 경우.