Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/intern/draw_manager_exec.c')
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c14
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;
}