[Bf-blender-cvs] [6914f7125bc] master: DRW: Do not update the view ubo for each pass

Clément Foucault noreply at git.blender.org
Wed May 22 13:30:52 CEST 2019


Commit: 6914f7125bcfb766ab96f3e264e608013e00ed03
Author: Clément Foucault
Date:   Tue May 21 22:11:53 2019 +0200
Branches: master
https://developer.blender.org/rB6914f7125bcfb766ab96f3e264e608013e00ed03

DRW: Do not update the view ubo for each pass

Only update if the view changes.

===================================================================

M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/intern/draw_manager.h
M	source/blender/draw/intern/draw_manager_exec.c

===================================================================

diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index a86b8e9d508..c7256dd986f 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -662,6 +662,7 @@ static void drw_viewport_var_init(void)
     }
 
     DST.view_active = DST.view_default;
+    DST.view_previous = NULL;
   }
   else {
     zero_v3(DST.screenvecs[0]);
@@ -670,6 +671,7 @@ static void drw_viewport_var_init(void)
     DST.pixsize = 1.0f;
     DST.view_default = NULL;
     DST.view_active = NULL;
+    DST.view_previous = NULL;
   }
 
   /* fclem: Is this still needed ? */
diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h
index 0ccffceb37a..665cc6e2c7d 100644
--- a/source/blender/draw/intern/draw_manager.h
+++ b/source/blender/draw/intern/draw_manager.h
@@ -323,6 +323,7 @@ typedef struct DRWManager {
 
   DRWView *view_default;
   DRWView *view_active;
+  DRWView *view_previous;
   uint primary_view_ct;
   /** TODO(fclem) Remove this. Only here to support
    * shaders without common_view_lib.glsl */
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 2687d0ea094..addd45093a8 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -981,7 +981,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");
 
-  drw_update_view();
+  if (DST.view_previous != DST.view_active || DST.view_active->is_dirty) {
+    drw_update_view();
+    DST.view_active->is_dirty = false;
+    DST.view_previous = DST.view_active;
+  }
 
   /* GPU_framebuffer_clear calls can change the state outside the DRW module.
    * Force reset the affected states to avoid problems later. */



More information about the Bf-blender-cvs mailing list