Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authormano-wii <germano.costa@ig.com.br>2019-03-26 18:19:00 +0300
committermano-wii <germano.costa@ig.com.br>2019-03-26 18:29:12 +0300
commit6e3331990fa0111410e9981bd5bb1e4d1c84dd00 (patch)
tree6c768892a8d45398525f1b194038b2fbc832b095 /source
parentd67122e02733f38137148bdaab6e80c0f14f080a (diff)
DRW manager: Use existing viewport instead of creating a viewport in DRW_draw_depth_loop.
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/DRW_engine.h3
-rw-r--r--source/blender/draw/intern/draw_manager.c25
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c3
3 files changed, 14 insertions, 17 deletions
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();