[Bf-blender-cvs] [a0be113d2e0] soc-2019-openxr: Fix DirectX context not freed on session exit
Julian Eisel
noreply at git.blender.org
Wed Jul 17 15:18:55 CEST 2019
Commit: a0be113d2e08157d74f2e6ace25fb6d4e0c9ba01
Author: Julian Eisel
Date: Wed Jul 17 15:18:01 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rBa0be113d2e08157d74f2e6ace25fb6d4e0c9ba01
Fix DirectX context not freed on session exit
Also rename XrSurfaceData to wmXrSurfaceData
===================================================================
M source/blender/windowmanager/intern/wm_xr.c
===================================================================
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index f32d60bee46..f29fe6105ff 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -65,7 +65,7 @@ static wmSurface *g_xr_surface = NULL;
typedef struct {
GHOST_TXrGraphicsBinding gpu_binding_type;
-} XrSurfaceData;
+} wmXrSurfaceData;
typedef struct {
wmWindowManager *wm;
@@ -137,6 +137,14 @@ static void wm_xr_session_surface_draw(bContext *C)
static void wm_xr_session_free_data(wmSurface *surface)
{
WM_opengl_context_dispose(surface->ghost_ctx);
+ if (surface->secondary_ghost_ctx) {
+#ifdef WIN32
+ wmXrSurfaceData *data = surface->customdata;
+ if (data->gpu_binding_type == GHOST_kXrGraphicsD3D11) {
+ WM_directx_context_dispose(surface->secondary_ghost_ctx);
+ }
+#endif
+ }
GPU_context_active_set(surface->gpu_ctx);
GPU_context_discard(surface->gpu_ctx);
MEM_freeN(surface->customdata);
@@ -152,7 +160,7 @@ static wmSurface *wm_xr_session_surface_create(wmWindowManager *wm, unsigned int
}
wmSurface *surface = MEM_callocN(sizeof(*surface), __func__);
- XrSurfaceData *data = MEM_callocN(sizeof(*data), "XrSurfaceData");
+ wmXrSurfaceData *data = MEM_callocN(sizeof(*data), "XrSurfaceData");
unsigned int default_fb;
#ifndef WIN32
More information about the Bf-blender-cvs
mailing list