diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-04-16 23:55:02 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-04-16 23:55:02 +0300 |
commit | ae0c36f82bc4d574a043b9148745a0ba3130395c (patch) | |
tree | 5aa7f62d82c14f6eea3ea93158c70badd7d74bff /source/blender/draw | |
parent | f92e92b1c041582f5d31620f734951daeee3d552 (diff) |
Object Mode: Outline: Perf: Only do outlines detection if needed.
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/modes/object_mode.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c index 4bdd1444898..efbd43f6aac 100644 --- a/source/blender/draw/modes/object_mode.c +++ b/source/blender/draw/modes/object_mode.c @@ -2072,16 +2072,18 @@ static void OBJECT_draw_scene(void *vedata) DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); DefaultTextureList *dtxl = DRW_viewport_texture_list_get(); + int id_ct_select = g_data->id_ofs_select; + int id_ct_select_group = g_data->id_ofs_select_group; + int id_ct_active = g_data->id_ofs_active; + int id_ct_active_group = g_data->id_ofs_active_group; + int id_ct_transform = g_data->id_ofs_transform; + int outline_calls = id_ct_select + id_ct_select_group + id_ct_active + id_ct_active_group + id_ct_transform; + float clearcol[4] = {0.0f, 0.0f, 0.0f, 0.0f}; - if (DRW_state_is_fbo()) { + if (DRW_state_is_fbo() && outline_calls > 0) { DRW_stats_group_start("Outlines"); - int id_ct_select = g_data->id_ofs_select; - int id_ct_select_group = g_data->id_ofs_select_group; - int id_ct_active = g_data->id_ofs_active; - int id_ct_active_group = g_data->id_ofs_active_group; - g_data->id_ofs_active = 1; g_data->id_ofs_active_group = g_data->id_ofs_active + id_ct_active + 1; g_data->id_ofs_select = g_data->id_ofs_active_group + id_ct_active_group + 1; @@ -2137,7 +2139,9 @@ static void OBJECT_draw_scene(void *vedata) } /* Combine with scene buffer last */ - DRW_draw_pass(psl->outlines_resolve); + if (outline_calls > 0) { + DRW_draw_pass(psl->outlines_resolve); + } } /* This has to be freed only after drawing empties! */ |