제 4장에서 풀스크린 모드로 실행하는 중에 ALT + TAB을 누르게 되면 D3D8 디바이스를 소실하여 종료하게 될것이다.
이문제를 해결하기 위해 RenderRoop()함수와 CreateVertexBuffer에서 2가지 작업을 추가한다.

1)
HRESULT ResetDeviceObjects()
{
	HRESULT hr;

    // Release all vidmem objects
    //if( FAILED( hr = InvalidateDeviceObjects() ) )
    //    return hr;

	// Reset the device
	if( FAILED( hr = g_d3d_Device->Reset( &g_d3dpp ) ) )
		return hr;

	return S_OK;
}


HRESULT RenderLoop()
{
    HRESULT hr;

    // Test the cooperative level to see if it's okay to render
    if( FAILED( hr = g_d3d_Device->TestCooperativeLevel() ) )
    {
        // If the device was lost, do not render until we get it back
        if( D3DERR_DEVICELOST == hr )
            return S_OK;

        // Check if the device needs to be resized.
        if( D3DERR_DEVICENOTRESET == hr )
        {
            // If we are windowed, read the desktop mode and use the same format for
            // the back buffer
            if( !g_bIsFullScreen )
            {
				g_d3d->GetAdapterDisplayMode (D3DADAPTER_DEFAULT, &g_pd3ddm[g_iModeNum]);
                g_d3dpp.BackBufferFormat = g_pd3ddm[g_iModeNum].Format;
            }

            if( FAILED( hr = ResetDeviceObjects() ) )
                return hr;
        }
        return hr;
    }

    // Render the scene as normal
    if( FAILED( hr = Render3D() ) )
        return hr;

	return S_OK;
}

TestCooperativeLevel() 다이렉트 X API로 디바이스 분실, 디바이스 오류를 체크한다.
- 디바이스를 분실(D3DERR_DEVICELOST)했을때는 메세지 루프를 계속 돌게된다.
- D3DERR_DEVICENOTRESET이면 ResetDeviceObjects()에 의해 디바이스를 리셋한다.
- 디바이스 리셋을 실패하면 종료한다. 

CreateVertexBuffer에서 D3DPOOL_DEFAULT 플래그를 사용한다. 디폴트 디바이스 리소스 플래그이다.
D3DPOOL_DEFAULT플래그를 D3DPOOL_MANAGED플래그로 수정한다.
D3DPOOL_MANAGED플래그는 D3D8 디바이스 자체에서 리소스를 관리해 리소스를 잃어버리지 않도록 한다.
  
2)
      g_d3d_Device->CreateVertexBuffer (6*sizeof(CUSTOMVERTEX), 
										0, 
										D3DFVF_CUSTOMVERTEX, 
										D3DPOOL_MANAGED, 
										&g_VertexBuffer);

이제 디바이스를 잃어버리는 일이 일어나지 않을 것이다.