[Bf-blender-cvs] [6e3331990fa] master: DRW manager: Use existing viewport instead of creating a viewport in DRW_draw_depth_loop.

mano-wii noreply at git.blender.org
Tue Mar 26 16:32:07 CET 2019


Commit: 6e3331990fa0111410e9981bd5bb1e4d1c84dd00
Author: mano-wii
Date:   Tue Mar 26 12:19:00 2019 -0300
Branches: master
https://developer.blender.org/rB6e3331990fa0111410e9981bd5bb1e4d1c84dd00

DRW manager: Use existing viewport instead of creating a viewport in DRW_draw_depth_loop.

===================================================================

M	source/blender/draw/DRW_engine.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/editors/space_view3d/view3d_draw.c

===================================================================

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();



More information about the Bf-blender-cvs mailing list