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

Reply via email to