diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-05-30 01:36:54 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-05-30 14:43:34 +0300 |
commit | 7cdd5ed7bd228d46b5eecc3355b01d00f26d1ca2 (patch) | |
tree | ae4956f14f3718b27fea8b11a961482ba0d63305 /source/blender/draw/intern/draw_manager_data.c | |
parent | 9f2e154e020999263b17db5345111eba5fed9a90 (diff) |
DRW: Add unit_state to avoid lots of DRWCallState duplication
A lot of drawcalls don't use the object's properties and don't
need a dedicated DRWCallState. We allocate a unique one at
the begining and use it for all calls that uses the default
unit matrix.
Diffstat (limited to 'source/blender/draw/intern/draw_manager_data.c')
-rw-r--r-- | source/blender/draw/intern/draw_manager_data.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c index 5aec14a3100..7ac7fdf1ff2 100644 --- a/source/blender/draw/intern/draw_manager_data.c +++ b/source/blender/draw/intern/draw_manager_data.c @@ -396,15 +396,10 @@ static DRWCallState *drw_call_state_create(DRWShadingGroup *shgroup, float (*obm state->matflag = 0; /* Matrices */ - if (obmat != NULL) { - copy_m4_m4(state->model, obmat); + copy_m4_m4(state->model, obmat); - if (ob && (ob->transflag & OB_NEG_SCALE)) { - state->flag |= DRW_CALL_NEGSCALE; - } - } - else { - unit_m4(state->model); + if (ob && (ob->transflag & OB_NEG_SCALE)) { + state->flag |= DRW_CALL_NEGSCALE; } drw_call_state_update_matflag(state, shgroup, ob); @@ -435,8 +430,8 @@ static DRWCallState *drw_call_state_object(DRWShadingGroup *shgroup, float (*obm { if (ob == NULL) { if (obmat == NULL) { - /* TODO return unitmat state. */ - return drw_call_state_create(shgroup, obmat, ob); + BLI_assert(DST.unit_state); + return DST.unit_state; } else { return drw_call_state_create(shgroup, obmat, ob); |