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
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/blender/draw
parentd67122e02733f38137148bdaab6e80c0f14f080a (diff)
DRW manager: Use existing viewport instead of creating a viewport in DRW_draw_depth_loop.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/DRW_engine.h3
-rw-r--r--source/blender/draw/intern/draw_manager.c25
2 files changed, 12 insertions, 16 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();