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

This commit is contained in:
mano-wii 2019-03-26 12:19:00 -03:00
parent d67122e027
commit 6e3331990f
3 changed files with 14 additions and 17 deletions

@ -121,7 +121,8 @@ void DRW_draw_select_loop(
DRW_ObjectFilterFn object_filter_fn, void *object_filter_user_data); DRW_ObjectFilterFn object_filter_fn, void *object_filter_user_data);
void DRW_draw_depth_loop( void DRW_draw_depth_loop(
struct Depsgraph *depsgraph, 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_setup(struct ARegion *ar, const bool clear);
void DRW_framebuffer_select_id_release(struct ARegion *ar); void DRW_framebuffer_select_id_release(struct ARegion *ar);

@ -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). * object mode select-loop, see: ED_view3d_draw_depth_loop (legacy drawing).
*/ */
void DRW_draw_depth_loop( void DRW_draw_depth_loop(
Depsgraph *depsgraph, struct Depsgraph *depsgraph,
ARegion *ar, View3D *v3d) ARegion *ar, View3D *v3d,
GPUViewport *viewport)
{ {
Scene *scene = DEG_get_evaluated_scene(depsgraph); Scene *scene = DEG_get_evaluated_scene(depsgraph);
RenderEngineType *engine_type = ED_view3d_engine_type(scene, v3d->shading.type); RenderEngineType *engine_type = ED_view3d_engine_type(scene, v3d->shading.type);
@ -2346,15 +2347,6 @@ void DRW_draw_depth_loop(
/* Reset before using it. */ /* Reset before using it. */
drw_state_prepare_clean_for_draw(&DST); 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.viewport = viewport;
DST.options.is_depth = true; DST.options.is_depth = true;
@ -2366,6 +2358,11 @@ void DRW_draw_depth_loop(
.depsgraph = depsgraph, .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 */ /* Get list of enabled engines */
{ {
drw_engines_enable_basic(); drw_engines_enable_basic();
@ -2436,9 +2433,6 @@ void DRW_draw_depth_loop(
GPU_framebuffer_restore(); GPU_framebuffer_restore();
/* Cleanup for selection state */
GPU_viewport_free(viewport);
/* Changin context */ /* Changin context */
DRW_opengl_context_disable(); DRW_opengl_context_disable();
@ -2450,7 +2444,8 @@ void DRW_draw_depth_loop(
glEnable(GL_DEPTH_TEST); /* Cannot write to depth buffer without testing */ glEnable(GL_DEPTH_TEST); /* Cannot write to depth buffer without testing */
glDepthFunc(GL_ALWAYS); 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); glDepthFunc(GL_LEQUAL);
GPU_matrix_pop(); GPU_matrix_pop();

@ -745,7 +745,8 @@ void ED_view3d_draw_depth(
GPU_depth_test(true); 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) { if (rv3d->rflag & RV3D_CLIPPING) {
ED_view3d_clipping_disable(); ED_view3d_clipping_disable();