DirectX Graphics 레퍼런스 Direct3D C/C++ 레퍼런스 인터페이스 IDirect3DSwapChain9 Present   [목차열람] [주소복사] [슬롯비우기]
IDirect3DSwapChain9::Present 메서드
 
Microsoft DirectX 9.0

IDirect3DSwapChain9::Present 메서드


스왑 체인이 소유하는 백 버퍼의 순서 중(안)에서 다음의 컨텐츠를 제시한다.

구문

HRESULT Present(      

    const RECT *pSourceRect,     CONST RECT *pDestRect,     HWND hDestWindowOverride,     CONST RGNDATA *pDirtyRegion,     DWORD dwFlags );

파라미터

pSourceRect
[in] 전송원직사각형을 포함한 RECT 구조체의 포인터. 이 값은, 스왑 체인이 D3DSWAPEFFECT_COPY 로 생성되지 않은 한, NULL 이어야 한다. NULL 의 경우는, 전송원표면 전체가 표시된다. 직사각형이 전송원표면을 넘었을 경우, 직사각형은 전송원표면에 클리핑 된다.
pDestRect
[in] 윈도우의 클라이언트 좌표로 목적지 직사각형을 포함한 RECT 구조체의 포인터. 이 값은, 스왑 체인이 D3DSWAPEFFECT_COPY 로 생성되지 않은 한, NULL 이어야 한다. NULL 의 경우는, 클라이언트 영역 전체가 목적지 직사각형으로 채워진다. 직사각형이 목적지의 클라이언트 영역을 넘었을 경우, 직사각형은 목적지의 클라이언트 영역에 클리핑 된다.
hDestWindowOverride
[in] 클라이언트 영역이 이 프레젠테이션의 대상으로 해 다루어지는 목적지 윈도우. 이 파라미터가 NULL 의 경우는,D3DPRESENT_PARAMETERShWndDeviceWindow 멤버가 사용된다.
pDirtyRegion
[in] 이 값은, 스왑 체인이 D3DSWAPEFFECT_COPY 로 생성되지 않은 한, NULL 이어야 한다. 스왑 체인의 더 자세한 정보는, 「표면의 플립」 및 「D3DSWAPEFFECT 」를 참조할것.

이 값이 NULL 가 아닌 경우, 저장 되는 범위는, 백 버퍼 좌표로 표현된다. 범위내의 직사각형은, 갱신의 필요가 있는 픽셀의 최소 세트이다. 범위내의 픽셀만, 또는 적절히 확장된 직사각형 세트만을 복사 해 프레젠테이션을 최적화할 때, 이 메서드는 이러한 직사각형을 고려한다. 이것은, 최적화의 지원에만 사용되는 것이어, 애플리케이션은, 복사 되는 범위의 정확함에 의존해서는 안된다. 처리시에, 전송원직사각형 전체를 복사 하도록(듯이) 선택할 수도 있다.
dwFlags
[in] 드라이버가 프레젠테이션을 스케줄 할 수 없으면 리포트했을 때에, 애플리케이션이 메서드를 곧바로 되돌리도록(듯이) 요구할 수 있도록(듯이) 한다. 유효한 값은 0, 또는 D3DPRESENT_DONOTWAIT 와 D3DPRESENT_LINEAR_CONTENT 의 임의의 편성.

dwFlags = 0 의 경우, 이 메서드는, Microsoft® DirectX® 9.0 이전과 같이 동작한다. 하드웨어가 릴리즈 될 때까지, Present 는 에러를 돌려주지 않고 단순하게 돌아온다.

dwFlags = D3DPRESENT_DONOTWAIT 로, 하드웨어가 vsync 간격의 처리 또는 대기로 Busy 상태의 경우, 메서드는 D3DERR_WASSTILLDRAWING 를 돌려준다.

dwFlags = D3DPRESENT_LINEAR_CONTENT 의 경우, 윈도우 스왑 체인의 감마 보정이 선형 공간으로부터 sRGB 에 실행된다. 이 플래그는, 드라이버가 D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION 를 릴리즈 하는 경우만 유효가 된다. 감마 보정의 더 자세한 정보는, 「감마」를 참조할것.

반환값

성공했을 경우는,D3D_OK 를 돌려준다.

실패했을 경우는, 다음의 몇개의 값을 돌려준다.

D3DERR_DEVICELOST장치는, 손실하고 있지만, 현재 리셋 할 수 없다. 따라서, 렌더링은 불가능하다.
D3DERR_DRIVERINTERNALERROR

내부 드라이버 에러. 보통, 이 에러를 받으면 애플리케이션은 셧다운 해야 한다. 더 자세한 정보는, 「드라이버의 내부 에러」를 참조할것.

D3DERR_INVALIDCALL메서드의 호출이 무효이다. 예를 들어, 메서드의 파라미터에 무효인 값이 설정되어 있는 경우 등이다.
D3DERR_OUTOFVIDEOMEMORYMicrosoft® Direct3D® 가 처리를 실시하는데 충분한 디스플레이 메모리가 없다.
E_OUTOFMEMORYDirect3D 가 호출을 완료하기 위한 충분한 메모리를 할당할 수가 없었다.


주의

IDirect3DDevice9::Present 메서드는,IDirect3DSwapChain9::Present 에의 쇼트 컷이다. 스왑 체인 메서드는 갱신되어 드라이버가 프레젠테이션을 스케줄 할 수 없으면 리포트했을 때에, 애플리케이션이 메서드를 곧바로 되돌리도록(듯이) 요구할 수 있는 플래그를 취한다.

필요에 따라서, 전송원직사각형내의 픽셀을 타겟 윈도우의 클라이언트 영역의 목적지 직사각형에 전송 하기 위해서 확대 처리가 적용된다.

렌더링 타겟이 현재의 렌더링 타겟이 아닌 경우 (추가의 스왑 체인을 생성 할 때에 취득한 백 버퍼등)를 제외해,IDirect3DDevice9::PresentIDirect3DDevice9::BeginSceneIDirect3DDevice9::EndScene 의 페어의 사이에 호출하면, 이 메서드는 실패한다. 이것은, DirectX 9.0 의 새로운 동작이다.

참조

IDirect3DDevice9::Reset


© 2002 Microsoft Corporation. All rights reserved.
↑TOP