static void gfx_ctx_wgl_destroy(void *data) { HWND window = win32_get_window(); gfx_ctx_wgl_data_t *wgl = (gfx_ctx_wgl_data_t*)data; switch (win32_api) { case GFX_CTX_OPENGL_API: #ifdef HAVE_OPENGL if (win32_hrc) { glFinish(); wglMakeCurrent(NULL, NULL); if (!video_driver_is_video_cache_context()) { if (win32_hw_hrc) wglDeleteContext(win32_hw_hrc); wglDeleteContext(win32_hrc); win32_hrc = NULL; win32_hw_hrc = NULL; } } #endif break; case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN vulkan_context_destroy(&win32_vk, win32_vk.vk_surface != VK_NULL_HANDLE); if (win32_vk.context.queue_lock) slock_free(win32_vk.context.queue_lock); memset(&win32_vk, 0, sizeof(win32_vk)); #endif break; case GFX_CTX_NONE: default: break; } if (window && win32_hdc) { ReleaseDC(window, win32_hdc); win32_hdc = NULL; } if (window) { win32_monitor_from_window(); win32_destroy_window(); } if (g_win32_restore_desktop) { win32_monitor_get_info(); g_win32_restore_desktop = false; } #ifdef HAVE_DYNAMIC dylib_close(dll_handle); #endif if (wgl) free(wgl); wgl_adaptive_vsync = false; win32_core_hw_context_enable = false; g_win32_inited = false; win32_major = 0; win32_minor = 0; p_swap_interval = NULL; }
static void gfx_ctx_x_destroy_resources(gfx_ctx_x_data_t *x) { x11_input_ctx_destroy(); if (g_x11_dpy) { switch (x_api) { case GFX_CTX_OPENGL_API: case GFX_CTX_OPENGL_ES_API: #ifdef HAVE_OPENGL if (x->g_ctx) { if (x->swap_mode) glXSwapBuffersMscOML(g_x11_dpy, x->g_glx_win, 0, x->divisor, x->remainder); else glXSwapBuffers(g_x11_dpy, x->g_glx_win); glFinish(); glXMakeContextCurrent(g_x11_dpy, None, None, NULL); if (!video_driver_is_video_cache_context()) { if (x->g_hw_ctx) glXDestroyContext(g_x11_dpy, x->g_hw_ctx); if (x->g_ctx) glXDestroyContext(g_x11_dpy, x->g_ctx); x->g_ctx = NULL; x->g_hw_ctx = NULL; } } if (g_x11_win) { if (x->g_glx_win) glXDestroyWindow(g_x11_dpy, x->g_glx_win); x->g_glx_win = 0; } #endif break; case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN vulkan_context_destroy(&x->vk, g_x11_win != 0); #endif break; case GFX_CTX_NONE: default: break; } } if (g_x11_win && g_x11_dpy) { #ifdef HAVE_XINERAMA /* Save last used monitor for later. */ xinerama_save_last_used_monitor(DefaultRootWindow(g_x11_dpy)); #endif x11_window_destroy(false); } x11_colormap_destroy(); if (g_x11_dpy) { if (x->g_should_reset_mode) { x11_exit_fullscreen(g_x11_dpy); x->g_should_reset_mode = false; } if (!video_driver_is_video_cache_context()) { XCloseDisplay(g_x11_dpy); g_x11_dpy = NULL; } } #ifdef HAVE_OPENGL g_pglSwapInterval = NULL; g_pglSwapIntervalSGI = NULL; g_pglSwapIntervalEXT = NULL; #endif g_major = 0; g_minor = 0; x->g_core_es = false; }