From 2dd60e6c2cbdf3e39ed3451ee0f67a5b00a7a5bc Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Tue, 23 Jun 2020 17:19:00 +0200 Subject: Fix T77830: Crash in VR session when opening material preview Draw-manager mutex has to be set before activating OpenGL/GPU context. Otherwise, parallel jobs (like preview rendering) may try to activate the context from another thread. Also: Use WM wrappers for activating/releasing OpenGL context, which have an additional assert check. Suggest to backport this for 2.83.1. --- source/blender/windowmanager/xr/intern/wm_xr_session.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/windowmanager/xr/intern/wm_xr_session.c') diff --git a/source/blender/windowmanager/xr/intern/wm_xr_session.c b/source/blender/windowmanager/xr/intern/wm_xr_session.c index e9ff38c5a92..2f72b2b25a5 100644 --- a/source/blender/windowmanager/xr/intern/wm_xr_session.c +++ b/source/blender/windowmanager/xr/intern/wm_xr_session.c @@ -315,12 +315,9 @@ static void wm_xr_session_surface_draw(bContext *C) wm_xr_session_draw_data_populate( &wm->xr, CTX_data_scene(C), CTX_data_ensure_evaluated_depsgraph(C), &draw_data); - DRW_xr_drawing_begin(); - GHOST_XrSessionDrawViews(wm->xr.runtime->context, &draw_data); GPU_offscreen_unbind(surface_data->offscreen, false); - DRW_xr_drawing_end(); } bool wm_xr_session_surface_offscreen_ensure(wmXrSurfaceData *surface_data, @@ -391,6 +388,9 @@ static wmSurface *wm_xr_session_surface_create(void) surface->draw = wm_xr_session_surface_draw; surface->free_data = wm_xr_session_surface_free_data; + surface->activate = DRW_xr_drawing_begin; + surface->deactivate = DRW_xr_drawing_end; + surface->ghost_ctx = DRW_xr_opengl_context_get(); surface->gpu_ctx = DRW_xr_gpu_context_get(); -- cgit v1.2.3