diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-08-25 14:03:49 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-08-27 00:54:47 +0300 |
commit | f8c857ad72e29eb509bd04067f94cd3df8a54aa4 (patch) | |
tree | 1f69b176ad222c582abbb70bb1df5ebc8dca76f5 /source/blender/draw/intern/draw_manager_exec.c | |
parent | 6ee5e6a333c229aa105206b07817ee9bf4a75c2e (diff) |
DRW: Remove unecessary GL calls
Diffstat (limited to 'source/blender/draw/intern/draw_manager_exec.c')
-rw-r--r-- | source/blender/draw/intern/draw_manager_exec.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 3180cf5c459..e99d95282a0 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -263,7 +263,7 @@ void drw_state_set(DRWState state) } else { glDisable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE); /* Don't multiply incoming color by alpha. */ + // glBlendFunc(GL_ONE, GL_ONE); /* Don't multiply incoming color by alpha. */ } } } @@ -1023,8 +1023,11 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) release_ubo_slots(shader_changed); release_texture_slots(shader_changed); - drw_state_set((pass_state & shgroup->state_extra_disable) | shgroup->state_extra); - drw_stencil_set(shgroup->stencil_mask); + /* Only set the state if there is something to draw. */ + if (!DRW_shgroup_is_empty(shgroup)) { + drw_state_set((pass_state & shgroup->state_extra_disable) | shgroup->state_extra); + drw_stencil_set(shgroup->stencil_mask); + } /* Binding Uniform */ for (DRWUniform *uni = shgroup->uniforms; uni; uni = uni->next) { @@ -1234,9 +1237,6 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) if (use_tfeedback) { GPU_shader_transform_feedback_disable(shgroup->shader); } - - /* TODO: remove, (currently causes alpha issue with sculpt, need to investigate) */ - DRW_state_reset(); } static void drw_update_view(void) @@ -1275,6 +1275,10 @@ static void drw_draw_pass_ex(DRWPass *pass, DRWShadingGroup *start_group, DRWSha BLI_assert(DST.buffer_finish_called && "DRW_render_instance_buffer_finish had not been called before drawing"); + if (DRW_pass_is_empty(pass)) { + return; + } + drw_update_view(); drw_state_set(pass->state); |