DirectX로 화면을 열심히 그리다 보면..

Alt+Tab 이나 전체화면에서 윈도우로,, 혹은 윈도우에서 전체화면으로 변경하면

디바이스를 잃어버리는 경우가 생긴다.;

그럼 까만 화면을 열심히 그리고 있겠지 ;ㅁ;

혹은..

윈도우 모드에서 화면의 크기를 변경시키면 그 상태 그대로 찌그러져버리고 만다..

아; 이 얼마나 슬픈 일인가?;;

다행히 이런 일들엔 해결 방법이 존재했다;;

HRESULT Reset()
{
   // 화면 사이즈가 변하면........
   HRESULT hr = E_FAIL;
   if(g_pD3D)
   {
       D3DPRESENT_PARAMETERS d3dpp;

       ZeroMemory( &d3dpp, sizeof(d3dpp) );
       D3DDISPLAYMODE pdd;
       if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &pdd)))
           return hr;

       d3dpp.Windowed = true; // 창모드이면.
       // Param 설정은 자기 입맛에 맞게~ ;ㅁ;
       d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
       d3dpp.BackBufferFormat = pdd.Format;
       ShutdownSprite(); // sprite 객체를 쓰면.. 먼저 릴리즈 시키자..
       hr = g_pd3dDevice->Reset(&d3dpp);
       InitSprite(); // 다시 만들어 주는거 잊지말고.
   }
   return hr;
}

대략 이러한 방법으로 해결 할 수 있다.

만약 당신이 sprite를 쓴다면, 그리고 POOL 옵션이 D3DPOOL_MANAGED 가 아니라면,

일일이 sprite를 해체 시키고, 다시 로드해 주는 작업이 필요할 것이다.

-0-;

DX 넘 어려워~;

위 코드는 DX8.1에서 확인하였음;

Comment List

  1. 나드네 2012.07.28 18:26 address / modify or delete / reply

    오 감사합니다. 좋은 내용이군요.

|  1  |  ···  |  107  |  108  |  109  |  110  |  111  |  112  |  113  |  114  |  115  |  ···  |  180  |