diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2022-03-19 22:40:13 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2022-03-20 00:05:34 +0300 |
commit | 6ae03375b6c7270b321d980f49feaf4412e0c0f0 (patch) | |
tree | 18d79bfb324a6a79111332799a8dd6afa295bcd6 /source/blender/draw/intern/draw_manager_exec.c | |
parent | 3eaf3453529c40bda6d079cc3942abb678489e1a (diff) |
DRW: Make use of shader shared header
# Conflicts:
# source/blender/draw/intern/draw_manager.h
# source/blender/draw/intern/draw_manager_exec.c
# source/blender/draw/intern/draw_shader_shared.h
Diffstat (limited to 'source/blender/draw/intern/draw_manager_exec.c')
-rw-r--r-- | source/blender/draw/intern/draw_manager_exec.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 682a91ee7d4..7d6ce51ff35 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -1068,8 +1068,13 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) } } -static void drw_update_view(void) +static void drw_update_view(const float viewport_size[2]) { + ViewInfos *storage = &DST.view_active->storage; + copy_v2_v2(storage->viewport_size, viewport_size); + copy_v2_v2(storage->viewport_size_inverse, viewport_size); + invert_v2(storage->viewport_size_inverse); + /* TODO(fclem): update a big UBO and only bind ranges here. */ GPU_uniformbuf_update(G_draw.view_ubo, &DST.view_active->storage); @@ -1097,8 +1102,11 @@ static void drw_draw_pass_ex(DRWPass *pass, BLI_assert(DST.buffer_finish_called && "DRW_render_instance_buffer_finish had not been called before drawing"); - if (DST.view_previous != DST.view_active || DST.view_active->is_dirty) { - drw_update_view(); + float viewport[4]; + GPU_viewport_size_get_f(viewport); + if (DST.view_previous != DST.view_active || DST.view_active->is_dirty || + !equals_v2v2(DST.view_active->storage.viewport_size, &viewport[2])) { + drw_update_view(&viewport[2]); DST.view_active->is_dirty = false; DST.view_previous = DST.view_active; } |