[Bf-blender-cvs] [ecbba1ff2d3] temp-drawcontext: DRW: Fix GPUViewport's FBOs being free in wrong ogl context.
Clément Foucault
noreply at git.blender.org
Fri Feb 23 15:51:42 CET 2018
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) {
More information about the Bf-blender-cvs
mailing list