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

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

View File

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

View File

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

View File

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