[Bf-blender-cvs] [c980f9e652a] tmp-overlay-engine: Overlay Engine: Make overlay parameters reset TAA

Clément Foucault noreply at git.blender.org
Wed Nov 27 10:39:50 CET 2019


Commit: c980f9e652a87ecf6dde7a10c117b5623232f2a2
Author: Clément Foucault
Date:   Wed Nov 27 11:09:40 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rBc980f9e652a87ecf6dde7a10c117b5623232f2a2

Overlay Engine: Make overlay parameters reset TAA

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

M	source/blender/draw/engines/overlay/overlay_engine.c
M	source/blender/draw/engines/overlay/overlay_grid.c
M	source/blender/draw/engines/overlay/overlay_private.h

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

diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 5aefdd20c54..0c1d0657432 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -41,15 +41,54 @@ static void OVERLAY_engine_init(void *vedata)
   OVERLAY_Data *data = vedata;
   OVERLAY_StorageList *stl = data->stl;
   const DRWContextState *draw_ctx = DRW_context_state_get();
+  const RegionView3D *rv3d = draw_ctx->rv3d;
+  const View3D *v3d = draw_ctx->v3d;
 
   if (!stl->pd) {
     /* Alloc transient pointers */
     stl->pd = MEM_callocN(sizeof(*stl->pd), __func__);
   }
 
-  stl->pd->ctx_mode = CTX_data_mode_enum_ex(
+  OVERLAY_PrivateData *pd = stl->pd;
+  View3DOverlay overlay;
+  short v3d_flag, v3d_gridflag;
+
+  pd->hide_overlays = (v3d->flag2 & V3D_HIDE_OVERLAYS) != 0;
+  pd->ctx_mode = CTX_data_mode_enum_ex(
       draw_ctx->object_edit, draw_ctx->obact, draw_ctx->object_mode);
 
+  if (!pd->hide_overlays) {
+    overlay = v3d->overlay;
+    v3d_flag = v3d->flag;
+    v3d_gridflag = v3d->gridflag;
+  }
+  else {
+    memset(&overlay, 0, sizeof(overlay));
+    v3d_flag = 0;
+    v3d_gridflag = 0;
+    overlay.flag = V3D_OVERLAY_HIDE_TEXT | V3D_OVERLAY_HIDE_MOTION_PATHS | V3D_OVERLAY_HIDE_BONES |
+                   V3D_OVERLAY_HIDE_OBJECT_XTRAS | V3D_OVERLAY_HIDE_OBJECT_ORIGINS;
+  }
+
+  if (v3d->shading.type == OB_WIRE) {
+    overlay.flag |= V3D_OVERLAY_WIREFRAMES;
+  }
+
+  /* Check if anything changed, and if so, reset AA. */
+  if (v3d_flag != pd->v3d_flag || pd->v3d_gridflag != v3d_gridflag ||
+      memcmp(&pd->overlay, &overlay, sizeof(overlay))) {
+    pd->overlay = overlay;
+    pd->v3d_flag = v3d_flag;
+    pd->v3d_gridflag = v3d_gridflag;
+    OVERLAY_antialiasing_reset(vedata);
+  }
+
+  pd->wireframe_mode = (v3d->shading.type == OB_WIRE);
+  pd->clipping_state = (rv3d->rflag & RV3D_CLIPPING) ? DRW_STATE_CLIP_PLANES : 0;
+  pd->xray_enabled = XRAY_ACTIVE(v3d);
+  pd->xray_enabled_and_not_wire = pd->xray_enabled && v3d->shading.type > OB_WIRE;
+  pd->clear_in_front = (v3d->shading.type != OB_SOLID);
+
   OVERLAY_antialiasing_init(vedata);
 
   switch (stl->pd->ctx_mode) {
@@ -73,34 +112,6 @@ static void OVERLAY_cache_init(void *vedata)
   OVERLAY_StorageList *stl = data->stl;
   OVERLAY_PrivateData *pd = stl->pd;
 
-  const DRWContextState *draw_ctx = DRW_context_state_get();
-  const RegionView3D *rv3d = draw_ctx->rv3d;
-  const View3D *v3d = draw_ctx->v3d;
-
-  pd->hide_overlays = (v3d->flag2 & V3D_HIDE_OVERLAYS) != 0;
-
-  if (!pd->hide_overlays) {
-    pd->overlay = v3d->overlay;
-    pd->v3d_flag = v3d->flag;
-  }
-  else {
-    memset(&pd->overlay, 0, sizeof(pd->overlay));
-    pd->v3d_flag = 0;
-    pd->overlay.flag = V3D_OVERLAY_HIDE_TEXT | V3D_OVERLAY_HIDE_MOTION_PATHS |
-                       V3D_OVERLAY_HIDE_BONES | V3D_OVERLAY_HIDE_OBJECT_XTRAS |
-                       V3D_OVERLAY_HIDE_OBJECT_ORIGINS;
-  }
-
-  if (v3d->shading.type == OB_WIRE) {
-    pd->overlay.flag |= V3D_OVERLAY_WIREFRAMES;
-  }
-
-  pd->wireframe_mode = (v3d->shading.type == OB_WIRE);
-  pd->clipping_state = (rv3d->rflag & RV3D_CLIPPING) ? DRW_STATE_CLIP_PLANES : 0;
-  pd->xray_enabled = XRAY_ACTIVE(v3d);
-  pd->xray_enabled_and_not_wire = pd->xray_enabled && v3d->shading.type > OB_WIRE;
-  pd->clear_in_front = (v3d->shading.type != OB_SOLID);
-
   switch (pd->ctx_mode) {
     case CTX_MODE_EDIT_MESH:
       OVERLAY_edit_mesh_cache_init(vedata);
diff --git a/source/blender/draw/engines/overlay/overlay_grid.c b/source/blender/draw/engines/overlay/overlay_grid.c
index 85e5be08f4c..7dea6c198d0 100644
--- a/source/blender/draw/engines/overlay/overlay_grid.c
+++ b/source/blender/draw/engines/overlay/overlay_grid.c
@@ -53,11 +53,11 @@ void OVERLAY_grid_init(OVERLAY_Data *vedata)
   Scene *scene = draw_ctx->scene;
   RegionView3D *rv3d = draw_ctx->rv3d;
 
-  const bool show_axis_x = (v3d->gridflag & V3D_SHOW_X) != 0;
-  const bool show_axis_y = (v3d->gridflag & V3D_SHOW_Y) != 0;
-  const bool show_axis_z = (v3d->gridflag & V3D_SHOW_Z) != 0;
-  const bool show_floor = (v3d->gridflag & V3D_SHOW_FLOOR) != 0;
-  const bool show_ortho_grid = (v3d->gridflag & V3D_SHOW_ORTHO_GRID) != 0;
+  const bool show_axis_x = (pd->v3d_gridflag & V3D_SHOW_X) != 0;
+  const bool show_axis_y = (pd->v3d_gridflag & V3D_SHOW_Y) != 0;
+  const bool show_axis_z = (pd->v3d_gridflag & V3D_SHOW_Z) != 0;
+  const bool show_floor = (pd->v3d_gridflag & V3D_SHOW_FLOOR) != 0;
+  const bool show_ortho_grid = (pd->v3d_gridflag & V3D_SHOW_ORTHO_GRID) != 0;
 
   shd->grid_flag = 0;
 
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 8642ee49a63..9dbe6ea4627 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -272,7 +272,8 @@ typedef struct OVERLAY_PrivateData {
   bool hide_overlays;
   bool xray_enabled;
   bool xray_enabled_and_not_wire;
-  short v3d_flag;
+  short v3d_flag;     /* TODO move to View3DOverlay */
+  short v3d_gridflag; /* TODO move to View3DOverlay */
   DRWState clipping_state;
   OVERLAY_ShadingData shdata;



More information about the Bf-blender-cvs mailing list