bool Video_DX9::begin_prerender() { assert(!m_render_target && !m_render_to_surface); if(g_video_dx9_reset) { const HRESULT result = m_d3d_device->TestCooperativeLevel(); if(result == D3DERR_DEVICELOST) return false; else if(result == D3DERR_DRIVERINTERNALERROR) throw Video_Device_Failure(); if(result == D3DERR_DEVICENOTRESET) { if(FAILED(m_d3d_device->Reset(m_d3d_parameters))) throw Video_Device_Failure(); g_video_dx9_reset = false; init_context(); } } get_Textures().unlose_resources(); get_Fonts().unlose_resources(); return true; }
void Video_DX9::render_all() { assert(!m_render_target); static bool reset = false; if(reset) { const HRESULT result = m_d3d_device->TestCooperativeLevel(); if(result == D3DERR_DEVICELOST) return; else if(result == D3DERR_DRIVERINTERNALERROR) throw Video_Device_Failure(); if(result == D3DERR_DEVICENOTRESET) { if(FAILED(m_d3d_device->Reset(&m_d3d_parameters))) throw Video_Device_Failure(); reset = false; init_context(); } } get_Textures().unlose_resources(); get_Fonts().unlose_resources(); HRESULT result = m_d3d_device->Present(0, 0, 0, 0); if(result == S_OK) { D3DVIEWPORT9 vp = {0, 0, DWORD(get_screen_width()), DWORD(get_screen_height()), 0, 1}; m_d3d_device->SetViewport(&vp); m_d3d_device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(get_clear_color().r_ub(), get_clear_color().g_ub(), get_clear_color().b_ub()), 1.0f, 0); m_d3d_device->BeginScene(); get_Game().render(); m_d3d_device->EndScene(); } else if(result == D3DERR_DEVICELOST) { reset = true; return; } else if(result == D3DERR_DEVICEREMOVED) { throw Video_Device_Failure(); } }
bool Video_DX9::begin_render() { assert(!m_render_target && !m_render_to_surface); HRESULT result = m_d3d_device->Present(0, 0, 0, 0); if(result == S_OK) { D3DVIEWPORT9 vp = {0, 0, DWORD(get_Window().get_width()), DWORD(get_Window().get_height()), 0, 1}; m_d3d_device->SetViewport(&vp); m_d3d_device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(get_clear_Color().r_ub(), get_clear_Color().g_ub(), get_clear_Color().b_ub()), 1.0f, 0); m_d3d_device->BeginScene(); return true; } else if(result == D3DERR_DEVICELOST) { g_video_dx9_reset = true; return false; } else if(result == D3DERR_DEVICEREMOVED) { throw Video_Device_Failure(); } return false; }