static void android_gfx_ctx_destroy(void *data) { android_ctx_data_t *and = (android_ctx_data_t*)data; #ifdef HAVE_VULKAN struct android_app *android_app = (struct android_app*)g_android; #endif if (!and) return; switch (android_api) { case GFX_CTX_OPENGL_API: case GFX_CTX_OPENGL_ES_API: #ifdef HAVE_EGL egl_destroy(&and->egl); #endif break; case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN vulkan_context_destroy(&and->vk, android_app->window); if (and->vk.context.queue_lock) slock_free(and->vk.context.queue_lock); #endif break; case GFX_CTX_NONE: default: break; } free(data); }
static void gfx_ctx_xegl_destroy(void *data) { xegl_ctx_data_t *xegl = (xegl_ctx_data_t*)data; x11_input_ctx_destroy(); #ifdef HAVE_EGL egl_destroy(&xegl->egl); #endif if (g_x11_win) { /* Save last used monitor for later. */ x11_save_last_used_monitor(RootWindow( g_x11_dpy, DefaultScreen(g_x11_dpy))); x11_window_destroy(false); } x11_colormap_destroy(); if (xegl->should_reset_mode) { x11_exit_fullscreen(g_x11_dpy, &xegl->desktop_mode); xegl->should_reset_mode = false; } free(data); /* Do not close g_x11_dpy. We'll keep one for the entire application * lifecycle to work-around nVidia EGL limitations. */ }
static void gfx_ctx_mali_fbdev_destroy(void *data) { int fb; RFILE *fd = NULL; mali_ctx_data_t *mali = (mali_ctx_data_t*)data; if (mali) { #ifdef HAVE_EGL egl_destroy(&mali->egl); #endif mali->resize = false; free(mali); } /* Clear framebuffer and set cursor on again */ fd = filestream_open("/dev/tty", RFILE_MODE_READ_WRITE, -1); fb = filestream_get_fd(fd); ioctl(fb, VT_ACTIVATE,5); ioctl(fb, VT_ACTIVATE,1); filestream_close(fd); system("setterm -cursor on"); }
static void gfx_ctx_drm_destroy_resources(gfx_ctx_drm_data_t *drm) { if (!drm) return; /* Make sure we acknowledge all page-flips. */ gfx_ctx_drm_wait_flip(true); switch (drm_api) { case GFX_CTX_OPENGL_API: case GFX_CTX_OPENGL_ES_API: case GFX_CTX_OPENVG_API: #ifdef HAVE_EGL egl_destroy(&drm->egl); #endif break; case GFX_CTX_NONE: default: break; } free_drm_resources(drm); g_drm_mode = NULL; g_crtc_id = 0; g_connector_id = 0; drm->fb_width = 0; drm->fb_height = 0; g_bo = NULL; g_next_bo = NULL; }
static void gfx_ctx_wl_destroy_resources(gfx_ctx_wayland_data_t *wl) { if (!wl) return; switch (wl_api) { case GFX_CTX_OPENGL_API: case GFX_CTX_OPENGL_ES_API: case GFX_CTX_OPENVG_API: #ifdef HAVE_EGL egl_destroy(&wl->egl); if (wl->win) wl_egl_window_destroy(wl->win); #endif break; case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN vulkan_context_destroy(&wl->vk, wl->surface); if (wl->fd >= 0) close(wl->fd); #endif break; case GFX_CTX_NONE: default: break; } if (wl->shell) wl_shell_destroy(wl->shell); if (wl->compositor) wl_compositor_destroy(wl->compositor); if (wl->registry) wl_registry_destroy(wl->registry); if (wl->shell_surf) wl_shell_surface_destroy(wl->shell_surf); if (wl->surface) wl_surface_destroy(wl->surface); if (wl->dpy) { wl_display_flush(wl->dpy); wl_display_disconnect(wl->dpy); } #ifdef HAVE_EGL wl->win = NULL; #endif wl->shell = NULL; wl->compositor = NULL; wl->registry = NULL; wl->dpy = NULL; wl->shell_surf = NULL; wl->surface = NULL; wl->width = 0; wl->height = 0; }
static void gfx_ctx_emscripten_destroy(void *data) { emscripten_ctx_data_t *emscripten = (emscripten_ctx_data_t*)data; egl_destroy(&emscripten->egl); free(data); }
static void gfx_ctx_qnx_destroy(void *data) { qnx_ctx_data_t *qnx = (qnx_ctx_data_t*)data; egl_destroy(data); qnx->resize = false; free(data); }
static void gfx_ctx_qnx_destroy(void *data) { qnx_ctx_data_t *qnx = (qnx_ctx_data_t*)data; #ifdef HAVE_EGL egl_destroy(&qnx->egl); #endif free(data); }
void orbis_ctx_destroy(void *data) { orbis_ctx_data_t *ctx_orbis = (orbis_ctx_data_t *)data; if (ctx_orbis) { #ifdef HAVE_EGL egl_destroy(&ctx_orbis->egl); #endif ctx_orbis->resize = false; free(ctx_orbis); } }
static void gfx_ctx_opendingux_destroy(void *data) { opendingux_ctx_data_t *viv = (opendingux_ctx_data_t*)data; if (viv) { #ifdef HAVE_EGL egl_destroy(&viv->egl); #endif viv->resize = false; free(viv); } }
static void gfx_ctx_xegl_destroy(void *data) { x11_input_ctx_destroy(); egl_destroy(data); if (g_x11_win) { /* Save last used monitor for later. */ #ifdef HAVE_XINERAMA XWindowAttributes target; Window child; int x = 0, y = 0; XGetWindowAttributes(g_x11_dpy, g_x11_win, &target); XTranslateCoordinates(g_x11_dpy, g_x11_win, RootWindow(g_x11_dpy, DefaultScreen(g_x11_dpy)), target.x, target.y, &x, &y, &child); g_screen = x11_get_xinerama_monitor(g_x11_dpy, x, y, target.width, target.height); RARCH_LOG("[X/EGL]: Saved monitor #%u.\n", g_screen); #endif x11_window_destroy(false); } x11_colormap_destroy(); if (g_should_reset_mode) { x11_exit_fullscreen(g_x11_dpy, &g_desktop_mode); g_should_reset_mode = false; } /* Do not close g_x11_dpy. We'll keep one for the entire application * lifecycle to work-around nVidia EGL limitations. */ }
static void gfx_ctx_mali_fbdev_destroy(void *data) { int fd; mali_ctx_data_t *mali = (mali_ctx_data_t*)data; if (mali) { #ifdef HAVE_EGL egl_destroy(&mali->egl); #endif mali->resize = false; free(mali); } /* Clear framebuffer and set cursor on again */ fd = open("/dev/tty", O_RDWR); ioctl(fd, VT_ACTIVATE, 5); ioctl(fd, VT_ACTIVATE, 1); close(fd); system("setterm -cursor on"); }
static void gfx_ctx_mali_fbdev_destroy(void *data) { int fb; RFILE *fd; mali_ctx_data_t *mali = (mali_ctx_data_t*)data; if (mali) { egl_destroy(data); mali->resize = false; free(mali); } /* Clear framebuffer and set cursor on again */ fd = retro_fopen("/dev/tty", RFILE_MODE_READ_WRITE, -1); fb = retro_get_fd(fd); ioctl(fb, VT_ACTIVATE,5); ioctl(fb, VT_ACTIVATE,1); retro_fclose(fd); system("setterm -cursor on"); }
static void gfx_ctx_wl_destroy_resources(gfx_ctx_wayland_data_t *wl) { if (!wl) return; egl_destroy(wl); if (wl->win) wl_egl_window_destroy(wl->win); if (wl->shell) wl_shell_destroy(wl->shell); if (wl->compositor) wl_compositor_destroy(wl->compositor); if (wl->registry) wl_registry_destroy(wl->registry); if (wl->shell_surf) wl_shell_surface_destroy(wl->shell_surf); if (wl->surface) wl_surface_destroy(wl->surface); if (wl->dpy) { wl_display_flush(wl->dpy); wl_display_disconnect(wl->dpy); } wl->win = NULL; wl->shell = NULL; wl->compositor = NULL; wl->registry = NULL; wl->dpy = NULL; wl->shell_surf = NULL; wl->surface = NULL; wl->width = 0; wl->height = 0; }
static void gfx_ctx_qnx_destroy(void *data) { egl_destroy(data); g_resize = false; }