From 6e3331990fa0111410e9981bd5bb1e4d1c84dd00 Mon Sep 17 00:00:00 2001 From: mano-wii Date: Tue, 26 Mar 2019 12:19:00 -0300 Subject: DRW manager: Use existing viewport instead of creating a viewport in DRW_draw_depth_loop. --- source/blender/draw/DRW_engine.h | 3 ++- source/blender/draw/intern/draw_manager.c | 25 +++++++++-------------- source/blender/editors/space_view3d/view3d_draw.c | 3 ++- 3 files changed, 14 insertions(+), 17 deletions(-) (limited to 'source/blender') diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h index 68d4ef04f95..c06a7cdc564 100644 --- a/source/blender/draw/DRW_engine.h +++ b/source/blender/draw/DRW_engine.h @@ -121,7 +121,8 @@ void DRW_draw_select_loop( DRW_ObjectFilterFn object_filter_fn, void *object_filter_user_data); void DRW_draw_depth_loop( struct Depsgraph *depsgraph, - struct ARegion *ar, struct View3D *v3d); + struct ARegion *ar, struct View3D *v3d, + struct GPUViewport *viewport); void DRW_framebuffer_select_id_setup(struct ARegion *ar, const bool clear); void DRW_framebuffer_select_id_release(struct ARegion *ar); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 64e9b1a4259..c8d53480d4f 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -2333,8 +2333,9 @@ static void draw_depth_texture_to_screen(GPUTexture *texture) * object mode select-loop, see: ED_view3d_draw_depth_loop (legacy drawing). */ void DRW_draw_depth_loop( - Depsgraph *depsgraph, - ARegion *ar, View3D *v3d) + struct Depsgraph *depsgraph, + ARegion *ar, View3D *v3d, + GPUViewport *viewport) { Scene *scene = DEG_get_evaluated_scene(depsgraph); RenderEngineType *engine_type = ED_view3d_engine_type(scene, v3d->shading.type); @@ -2346,15 +2347,6 @@ void DRW_draw_depth_loop( /* Reset before using it. */ drw_state_prepare_clean_for_draw(&DST); - int viewport_size[2] = {ar->winx, ar->winy}; - struct GPUViewport *viewport = GPU_viewport_create(); - GPU_viewport_size_set(viewport, viewport_size); - - /* Setup framebuffer */ - draw_select_framebuffer_depth_only_setup(viewport_size); - GPU_framebuffer_bind(g_select_buffer.framebuffer_depth_only); - GPU_framebuffer_clear_depth(g_select_buffer.framebuffer_depth_only, 1.0f); - DST.viewport = viewport; DST.options.is_depth = true; @@ -2366,6 +2358,11 @@ void DRW_draw_depth_loop( .depsgraph = depsgraph, }; + /* Setup framebuffer */ + DefaultFramebufferList *fbl = (DefaultFramebufferList *)GPU_viewport_framebuffer_list_get(viewport); + GPU_framebuffer_bind(fbl->depth_only_fb); + GPU_framebuffer_clear_depth(fbl->depth_only_fb, 1.0f); + /* Get list of enabled engines */ { drw_engines_enable_basic(); @@ -2436,9 +2433,6 @@ void DRW_draw_depth_loop( GPU_framebuffer_restore(); - /* Cleanup for selection state */ - GPU_viewport_free(viewport); - /* Changin context */ DRW_opengl_context_disable(); @@ -2450,7 +2444,8 @@ void DRW_draw_depth_loop( glEnable(GL_DEPTH_TEST); /* Cannot write to depth buffer without testing */ glDepthFunc(GL_ALWAYS); - draw_depth_texture_to_screen(g_select_buffer.texture_depth); + DefaultTextureList *dtxl = (DefaultTextureList *)GPU_viewport_texture_list_get(viewport); + draw_depth_texture_to_screen(dtxl->depth); glDepthFunc(GL_LEQUAL); GPU_matrix_pop(); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index cfbc604852b..c2db61f0b72 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -745,7 +745,8 @@ void ED_view3d_draw_depth( GPU_depth_test(true); - DRW_draw_depth_loop(depsgraph, ar, v3d); + GPUViewport *viewport = WM_draw_region_get_viewport(ar, 0); + DRW_draw_depth_loop(depsgraph, ar, v3d, viewport); if (rv3d->rflag & RV3D_CLIPPING) { ED_view3d_clipping_disable(); -- cgit v1.2.3