멀티 윈도우로 렌더링

맵툴이나 애니메이션툴, 이펙트 툴을 만드는 경우, 여러개의 윈도우로 렌더링 할 필요가 있다.
멀티 뷰를 생각하면, 코드가 복잡 할 것 같지만 생각 보다는 간단하게 처리 할 수 있다.
아래 그림 처럼 나오게 만들어 보자!!!

.

멀티 윈도우에 렌더링하는 방법은 3가지가 있다.( 내가 아는 한도내에서이다)

1. IDirect3DDevice9::Present() 함수의 3번째 매개변수를 이용하는 방법

2. 2개의 디바이스를 생성하여 그리는 방법

3. IDirect3DDevice9::CreateAdditionalSwapChain을 이용하는 방법이다.

3번째가 가장 좋다고 한다...(추측)

하나씩 알아보자

1. IDirect3DDevice9::Present() 함수의 3번째 매개변수를 이용하는 방법

특별하게 어려움이 없는 방법이며, 코드 또한 간단하다.

HRESULT RenderMultiWindow (float timeDelta )

{

    //생략....

 

    g_d3d_Device->Clear ();

    g_d3d_Device->BeginScene ();

 

    //생략....

    g_d3d_Device->EndScene ();

    hr = g_d3d_Device->Present (NULL, NULL, g_hMultiWnd, NULL);

    return hr;

}

//-----------------------------------------------------------------

HRESULT Render3D (float timeDelta)

{

    //생략....

 

    g_d3d_Device->Clear ();

    g_d3d_Device->BeginScene ();

 

    //생략....

 

    g_d3d_Device->EndScene ();

    hr = g_d3d_Device->Present (NULL, NULL, g_hWnd, NULL);

    return hr;

}

렌더링을 두 번 하면서 그리기를 원하는 윈도우 핸들을 Present( )에 넣으면 된다.

두 번째 방법과 3번째 방법은 아래 싸이트 참조한다.

http://www.codesampler.com/dx9src/dx9src_1.htm