diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-02-19 21:36:12 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-02-19 21:36:48 +0300 |
commit | f972a3c31458a7048a6ffb3e26f7d802e3433934 (patch) | |
tree | bb617cbb91a90d4d874d1662e2c63eed1e47d51b /source/blender/draw/intern/draw_manager_exec.c | |
parent | bda8076d354ce9ce587d315bff4a089094af5847 (diff) |
DRW: Support inverted view matrix
We detect the case where we need to invert the facing directly inside the
DRWView update and do the appropriate GL calls at draw time.
Fix T63047 Camera with negative scale works only in Cycles Rendered view
Fix T71352 Negative scale camera causes BLI_assert
Diffstat (limited to 'source/blender/draw/intern/draw_manager_exec.c')
-rw-r--r-- | source/blender/draw/intern/draw_manager_exec.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 23a3e0b05d4..0ff3e2b1853 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -1072,7 +1072,7 @@ static void draw_call_resource_bind(DRWCommandsState *state, const DRWResourceHa /* Front face is not a resource but it is inside the resource handle. */ bool neg_scale = DRW_handle_negative_scale_get(handle); if (neg_scale != state->neg_scale) { - glFrontFace((neg_scale) ? GL_CW : GL_CCW); + glFrontFace((neg_scale != DST.view_active->is_inverted) ? GL_CW : GL_CCW); state->neg_scale = neg_scale; } @@ -1395,6 +1395,10 @@ static void drw_draw_pass_ex(DRWPass *pass, drw_state_set(pass->state); drw_state_validate(); + if (DST.view_active->is_inverted) { + glFrontFace(GL_CW); + } + DRW_stats_query_start(pass->name); for (DRWShadingGroup *shgroup = start_group; shgroup; shgroup = shgroup->next) { @@ -1444,6 +1448,11 @@ static void drw_draw_pass_ex(DRWPass *pass, drw_state_set((DST.state & ~DRW_STATE_RASTERIZER_ENABLED) | DRW_STATE_DEFAULT); } + /* Reset default. */ + if (DST.view_active->is_inverted) { + glFrontFace(GL_CCW); + } + DRW_stats_query_end(); } |