type_result DX9::restore() { HRESULT results = _device->TestCooperativeLevel(); while(results == D3DERR_DEVICELOST) { while(results != D3DERR_DEVICENOTRESET) { Sleep(1000); MSG message; PeekMessage(&message, NULL, 0, 0, PM_REMOVE); TranslateMessage(&message); DispatchMessage(&message); results = _device->TestCooperativeLevel(); } _releaseShaders(); _releaseResources(); if ( FAILED(_device->Reset(&_present_parameter)) ) results = D3DERR_DEVICELOST; else { _restoreResources(); _releaseShaders(); results = _device->TestCooperativeLevel(); } } return RESULT_SUCCESS; }
void DX9::_release() { _releaseShaders(); _releaseResources(); _releaseDevice(); _present_parameter.release(); _capabilities.release(); _display_mode_manager.release(); _window_handle = NE_NULL; }
Status CollectionBulkLoaderImpl::_runTaskReleaseResourcesOnFailure(const F& task) noexcept { AlternativeClientRegion acr(_client); auto guard = makeGuard([this] { _releaseResources(); }); try { const auto status = task(); if (status.isOK()) { guard.dismiss(); } return status; } catch (...) { std::terminate(); } }