diff options
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r-- | source/blender/editors/space_view3d/space_view3d.c | 6 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 12 |
3 files changed, 21 insertions, 1 deletions
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/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 6e3a0883489..68996cdf906 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2131,11 +2131,13 @@ ImBuf *ED_view3d_draw_offscreen_imbuf( } const bool own_ofs = (ofs == NULL); + DRW_opengl_context_enable(); if (own_ofs) { /* bind */ ofs = GPU_offscreen_create(sizex, sizey, use_full_sample ? 0 : samples, true, false, err_out); if (ofs == NULL) { + DRW_opengl_context_disable(); return NULL; } } @@ -2267,6 +2269,8 @@ ImBuf *ED_view3d_draw_offscreen_imbuf( GPU_offscreen_free(ofs); } + DRW_opengl_context_disable(); + if (ibuf->rect_float && ibuf->rect) IMB_rect_from_float(ibuf); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 4ccf86138e7..cb329e62e96 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -922,6 +922,11 @@ int view3d_opengl_select( UI_Theme_Store(&theme_state); UI_SetTheme(SPACE_VIEW3D, RGN_TYPE_WINDOW); +#ifndef WITH_OPENGL_LEGACY + /* All of the queries need to be perform on the drawing context. */ + DRW_opengl_context_enable(); +#endif + /* Re-use cache (rect must be smaller then the cached) * other context is assumed to be unchanged */ if (GPU_select_is_cached()) { @@ -941,7 +946,7 @@ int view3d_opengl_select( v3d->zbuf = true; glEnable(GL_DEPTH_TEST); } - + if (vc->rv3d->rflag & RV3D_CLIPPING) ED_view3d_clipping_set(vc->rv3d); @@ -994,6 +999,11 @@ int view3d_opengl_select( ED_view3d_clipping_disable(); finally: + +#ifndef WITH_OPENGL_LEGACY + DRW_opengl_context_disable(); +#endif + if (hits < 0) printf("Too many objects in select buffer\n"); /* XXX make error message */ UI_Theme_Restore(&theme_state); |