static void d3d_free(void *data) { d3d_video_t *d3d = (d3d_video_t*)data; d3d_deinitialize(d3d); #ifdef HAVE_OVERLAY d3d_free_overlays(d3d); #endif #ifdef HAVE_MENU d3d_free_overlay(d3d, d3d->rgui); #endif if (d3d->dev) d3d->dev->Release(); if (d3d->g_pD3D) d3d->g_pD3D->Release(); #ifdef HAVE_MONITOR Monitor::last_hm = MonitorFromWindow(d3d->hWnd, MONITOR_DEFAULTTONEAREST); #endif DestroyWindow(d3d->hWnd); if (d3d) delete d3d; #ifndef _XBOX UnregisterClass("RetroArch", GetModuleHandle(NULL)); #endif }
static void d3d_free(void *data) { d3d_video_t *d3d = (d3d_video_t*)data; HWND window = win32_get_window(); if (!d3d) return; d3d_deinitialize(d3d); #ifdef HAVE_OVERLAY d3d_free_overlays(d3d); #endif gfx_ctx_free(); #ifndef _XBOX #ifdef HAVE_MENU d3d_free_overlay(d3d, d3d->menu); if (d3d->menu) delete d3d->menu; #endif #endif d3d_device_free(d3d->dev, g_pD3D); d3d->dev = NULL; g_pD3D = NULL; win32_monitor_from_window(window, true); if (d3d) delete d3d; win32_destroy_window(); }
static void d3d_free(void *data) { d3d_video_t *d3d = (d3d_video_t*)data; d3d_deinitialize(d3d); #ifdef _XBOX if (d3d->ctx_driver && d3d->ctx_driver->destroy) d3d->ctx_driver->destroy(d3d); d3d->ctx_driver = NULL; #endif if (d3d->dev) d3d->dev->Release(); if (d3d->g_pD3D) d3d->g_pD3D->Release(); #ifdef HAVE_MONITOR Monitor::last_hm = MonitorFromWindow(d3d->hWnd, MONITOR_DEFAULTTONEAREST); DestroyWindow(d3d->hWnd); #endif if (d3d) delete d3d; #ifndef _XBOX UnregisterClass("RetroArch", GetModuleHandle(NULL)); #endif }
static bool d3d_initialize(d3d_video_t *d3d, const video_info_t *info) { unsigned width, height; bool ret = true; settings_t *settings = config_get_ptr(); if (!d3d) return false; if (!g_pD3D) ret = d3d_init_base(d3d, info); else if (d3d->needs_restore) { D3DPRESENT_PARAMETERS d3dpp; d3d_make_d3dpp(d3d, info, &d3dpp); if (!d3d_reset(d3d->dev, &d3dpp)) { d3d_deinitialize(d3d); d3d_device_free(NULL, g_pD3D); g_pD3D = NULL; ret = d3d_init_base(d3d, info); if (ret) RARCH_LOG("[D3D]: Recovered from dead state.\n"); } } if (!ret) return ret; if (!d3d_init_chain(d3d, info)) { RARCH_ERR("Failed to initialize render chain.\n"); return false; } video_driver_get_size(&width, &height); d3d_set_viewport(d3d, width, height, false, true); #if defined(_XBOX360) strlcpy(settings->path.font, "game:\\media\\Arial_12.xpr", sizeof(settings->path.font)); #endif if (!font_driver_init_first(NULL, NULL, d3d, settings->path.font, 0, false, FONT_DRIVER_RENDER_DIRECT3D_API)) { RARCH_ERR("[D3D]: Failed to initialize font renderer.\n"); return false; } return true; }
bool d3d_restore(d3d_video_t *d3d) { d3d_deinitialize(d3d); d3d->needs_restore = !d3d_initialize(d3d, &d3d->video_info); if (d3d->needs_restore) RARCH_ERR("[D3D]: Restore error.\n"); return !d3d->needs_restore; }
bool d3d_restore(d3d_video_t *d3d) { #ifdef _XBOX d3d->needs_restore = false; #else d3d_deinitialize(d3d); d3d->needs_restore = !d3d_initialize(d3d, &d3d->video_info); #endif if (d3d->needs_restore) RARCH_ERR("[D3D]: Restore error.\n"); return !d3d->needs_restore; }
static bool d3d_restore(void *data) { d3d_video_t *d3d = (d3d_video_t*)data; if (!d3d) return false; d3d_deinitialize(d3d); if (!d3d_initialize(d3d, &d3d->video_info)) { RARCH_ERR("[D3D]: Restore error.\n"); return false; } d3d->needs_restore = false; return true; }
static void d3d_free(void *data) { d3d_video_t *d3d = (d3d_video_t*)data; if (!d3d) return; d3d_deinitialize(d3d); #ifdef HAVE_OVERLAY d3d_free_overlays(d3d); #endif #ifdef _XBOX if (d3d->ctx_driver && d3d->ctx_driver->destroy) d3d->ctx_driver->destroy(d3d); d3d->ctx_driver = NULL; #else #ifdef HAVE_MENU d3d_free_overlay(d3d, d3d->menu); #endif #endif if (d3d->dev) d3d->dev->Release(); if (d3d->g_pD3D) d3d->g_pD3D->Release(); #ifdef HAVE_MONITOR monitor_last = MonitorFromWindow(d3d->hWnd, MONITOR_DEFAULTTONEAREST); DestroyWindow(d3d->hWnd); #endif if (d3d) free(d3d); #ifndef _XBOX UnregisterClass("RetroArch", GetModuleHandle(NULL)); #endif }
static bool d3d_initialize(void *data, const video_info_t *info) { d3d_video_t *d3d = (d3d_video_t*)data; bool ret = true; if (!d3d->g_pD3D) ret = d3d_init_base(d3d, info); else if (d3d->needs_restore) { D3DPRESENT_PARAMETERS d3dpp; d3d_make_d3dpp(d3d, info, &d3dpp); if (d3d->dev->Reset(&d3dpp) != D3D_OK) { HRESULT res = d3d->dev->TestCooperativeLevel(); const char *err; switch (res) { case D3DERR_DEVICELOST: err = "DEVICELOST"; break; case D3DERR_DEVICENOTRESET: err = "DEVICENOTRESET"; break; case D3DERR_DRIVERINTERNALERROR: err = "DRIVERINTERNALERROR"; break; default: err = "Unknown"; } // Try to recreate the device completely ... RARCH_WARN("[D3D]: Attempting to recover from dead state (%s).\n", err); d3d_deinitialize(d3d); d3d->g_pD3D->Release(); d3d->g_pD3D = NULL; ret = d3d_init_base(d3d, info); if (ret) RARCH_LOG("[D3D]: Recovered from dead state.\n"); else return ret; } } if (!ret) return ret; d3d_calculate_rect(d3d, d3d->screen_width, d3d->screen_height, info->force_aspect, g_extern.system.aspect_ratio); #ifdef HAVE_SHADERS if (!d3d_init_shader(d3d)) { RARCH_ERR("Failed to initialize shader subsystem.\n"); return false; } #endif if (!d3d_init_chain(d3d, info)) { RARCH_ERR("Failed to initialize render chain.\n"); return false; } #if defined(_XBOX360) strlcpy(g_settings.video.font_path, "game:\\media\\Arial_12.xpr", sizeof(g_settings.video.font_path)); #endif d3d->font_ctx = d3d_font_init_first(d3d, g_settings.video.font_path, g_settings.video.font_size); if (!d3d->font_ctx) { RARCH_ERR("Failed to initialize font.\n"); return false; } return true; }
static bool d3d_initialize(d3d_video_t *d3d, const video_info_t *info) { bool ret = true; settings_t *settings = config_get_ptr(); global_t *global = global_get_ptr(); if (!d3d) return false; if (!d3d->g_pD3D) ret = d3d_init_base(d3d, info); else if (d3d->needs_restore) { D3DPRESENT_PARAMETERS d3dpp; d3d_make_d3dpp(d3d, info, &d3dpp); if (d3d->dev->Reset(&d3dpp) != D3D_OK) { /* Try to recreate the device completely. */ #ifndef _XBOX HRESULT res = d3d->dev->TestCooperativeLevel(); const char *err; switch (res) { case D3DERR_DEVICELOST: err = "DEVICELOST"; break; case D3DERR_DEVICENOTRESET: err = "DEVICENOTRESET"; break; case D3DERR_DRIVERINTERNALERROR: err = "DRIVERINTERNALERROR"; break; default: err = "Unknown"; } RARCH_WARN( "[D3D]: Attempting to recover from dead state (%s).\n", err); #else RARCH_WARN("[D3D]: Attempting to recover from dead state.\n"); #endif d3d_deinitialize(d3d); d3d->g_pD3D->Release(); d3d->g_pD3D = NULL; ret = d3d_init_base(d3d, info); if (ret) RARCH_LOG("[D3D]: Recovered from dead state.\n"); } } if (!ret) return ret; d3d_calculate_rect(d3d, d3d->screen_width, d3d->screen_height, info->force_aspect, global->system.aspect_ratio); if (!d3d_init_chain(d3d, info)) { RARCH_ERR("Failed to initialize render chain.\n"); return false; } #if defined(_XBOX360) strlcpy(settings->video.font_path, "game:\\media\\Arial_12.xpr", sizeof(settings->video.font_path)); #endif if (!d3d_font_init_first(&d3d->font_driver, &d3d->font_handle, d3d, settings->video.font_path, 0)) { RARCH_ERR("[D3D]: Failed to initialize font renderer.\n"); return false; } return true; }