DirectX로 화면을 열심히 그리다 보면..
Alt+Tab 이나 전체화면에서 윈도우로,, 혹은 윈도우에서 전체화면으로 변경하면
디바이스를 잃어버리는 경우가 생긴다.;
그럼 까만 화면을 열심히 그리고 있겠지 ;ㅁ;
혹은..
윈도우 모드에서 화면의 크기를 변경시키면 그 상태 그대로 찌그러져버리고 만다..
아; 이 얼마나 슬픈 일인가?;;
다행히 이런 일들엔 해결 방법이 존재했다;;
{
// 화면 사이즈가 변하면........
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에서 확인하였음;
'공부합시다! > Tip n Tech' 카테고리의 다른 글
| [WinAPI] AppBar 전체화면의 일부영역을 차지하기. (0) | 2006/05/18 |
|---|---|
| [VCL] TStringList 를 이용한 token 기능 사용하기. (0) | 2006/05/15 |
| 윈도우XP 새로 설치할때.. 심심하시죠?~ (6) | 2006/05/12 |
| [DirectX] Alt+Tab, Resize 등 화면 크기를 변경했을때 디바이스 재설정 하는 법 (0) | 2006/05/09 |
| 각도 계산하기. (0) | 2006/05/04 |
| 링크 생성기 Link Maker (0) | 2006/03/23 |