Commit: ecbba1ff2d32fea2ab89c39238c0a8654e91304a Author: Clément Foucault Date: Thu Feb 22 21:54:34 2018 +0100 Branches: temp-drawcontext https://developer.blender.org/rBecbba1ff2d32fea2ab89c39238c0a8654e91304a
DRW: Fix GPUViewport's FBOs being free in wrong ogl context. =================================================================== M source/blender/editors/space_view3d/space_view3d.c M source/blender/gpu/intern/gpu_viewport.c M source/blender/windowmanager/intern/wm_window.c =================================================================== diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 73fd3f562be..1774390a1e5 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -65,6 +65,8 @@ #include "GPU_viewport.h" #include "GPU_matrix.h" +#include "DRW_engine.h" + #include "WM_api.h" #include "WM_types.h" #include "WM_message.h" @@ -572,7 +574,9 @@ static void view3d_main_region_exit(wmWindowManager *wm, ARegion *ar) } if (rv3d->viewport) { + DRW_opengl_context_enable(); GPU_viewport_free(rv3d->viewport); + DRW_opengl_context_disable(); MEM_freeN(rv3d->viewport); rv3d->viewport = NULL; } @@ -757,7 +761,9 @@ static void view3d_main_region_free(ARegion *ar) GPU_fx_compositor_destroy(rv3d->compositor); } if (rv3d->viewport) { + DRW_opengl_context_enable(); GPU_viewport_free(rv3d->viewport); + DRW_opengl_context_disable(); MEM_freeN(rv3d->viewport); } diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c index 665859e4d33..83b9a8f0b0e 100644 --- a/source/blender/gpu/intern/gpu_viewport.c +++ b/source/blender/gpu/intern/gpu_viewport.c @@ -467,6 +467,7 @@ cleanup: if (!ok) { GPU_viewport_free(viewport); MEM_freeN(viewport); + DRW_opengl_context_disable(); return; } @@ -587,6 +588,7 @@ static void gpu_viewport_passes_free(PassList *psl, int psl_len) } } +/* Must be executed inside Drawmanager Opengl Context. */ void GPU_viewport_free(GPUViewport *viewport) { gpu_viewport_engines_data_free(viewport); diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 56ee1078bf2..a7baf92e9a0 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -1042,6 +1042,10 @@ void wm_window_make_drawable(wmWindowManager *wm, wmWindow *win) void wm_window_reset_drawable(void) { wmWindowManager *wm = G.main->wm.first; + + if (wm == NULL) + return; + wmWindow *win = wm->windrawable; if (BLI_thread_is_main() && win && win->ghostwin) { _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs