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:
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h1
-rw-r--r--source/blender/draw/engines/eevee/eevee_temporal_sampling.c4
-rw-r--r--source/blender/draw/engines/workbench/workbench_data.c2
-rw-r--r--source/blender/draw/engines/workbench/workbench_effect_antialiasing.c9
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h1
-rw-r--r--source/blender/draw/intern/DRW_render.h1
-rw-r--r--source/blender/draw/intern/draw_manager.c9
7 files changed, 24 insertions, 3 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index e2470b4fa76..264f301e52c 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -600,6 +600,7 @@ typedef struct EEVEE_EffectsInfo {
int taa_total_sample;
float taa_alpha;
bool prev_drw_support;
+ bool prev_is_navigating;
float prev_drw_persmat[4][4];
struct DRWView *taa_view;
/* Ambient Occlusion */
diff --git a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
index 1f44b815a42..b70d872c4af 100644
--- a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
+++ b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
@@ -244,8 +244,10 @@ int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data
copy_m4_m4(effects->prev_drw_persmat, persmat);
/* Prevent ghosting from probe data. */
- view_is_valid = view_is_valid && (effects->prev_drw_support == DRW_state_draw_support());
+ view_is_valid = view_is_valid && (effects->prev_drw_support == DRW_state_draw_support()) &&
+ (effects->prev_is_navigating == DRW_state_is_navigating());
effects->prev_drw_support = DRW_state_draw_support();
+ effects->prev_is_navigating = DRW_state_is_navigating();
if (((effects->taa_total_sample == 0) ||
(effects->taa_current_sample < effects->taa_total_sample)) ||
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c
index fc047eadf55..6ef9cbfab57 100644
--- a/source/blender/draw/engines/workbench/workbench_data.c
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -182,7 +182,7 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
WORKBENCH_ViewLayerData *vldata = workbench_view_layer_data_ensure_ex(draw_ctx->view_layer);
wpd->is_playback = DRW_state_is_playback();
- wpd->is_navigating = rv3d && (rv3d->rflag & (RV3D_NAVIGATING | RV3D_PAINTING));
+ wpd->is_navigating = DRW_state_is_navigating();
wpd->ctx_mode = CTX_data_mode_enum_ex(
draw_ctx->object_edit, draw_ctx->obact, draw_ctx->object_mode);
diff --git a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c
index a0db09e9273..094d13fb84c 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c
@@ -168,10 +168,17 @@ void workbench_antialiasing_engine_init(WORKBENCH_Data *vedata)
wpd->view = NULL;
- /* reset complete drawing when navigating or during viewport playback. */
+ /* Reset complete drawing when navigating or during viewport playback or when
+ * leaving one of those states. In case of multires modifier the navigation
+ * mesh differs from the viewport mesh, so we need to be sure to restart. */
if (wpd->taa_sample != 0) {
if (wpd->is_navigating || wpd->is_playback) {
wpd->taa_sample = 0;
+ wpd->reset_next_sample = true;
+ }
+ else if (wpd->reset_next_sample) {
+ wpd->taa_sample = 0;
+ wpd->reset_next_sample = false;
}
}
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index 87b1c82ce94..a5e80f417d3 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -333,6 +333,7 @@ typedef struct WORKBENCH_PrivateData {
bool dof_enabled;
bool is_playback;
bool is_navigating;
+ bool reset_next_sample;
} WORKBENCH_PrivateData; /* Transient data */
typedef struct WORKBENCH_ObjectData {
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 382e7313f21..2d6d6c7d9d0 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -670,6 +670,7 @@ bool DRW_state_do_color_management(void);
bool DRW_state_is_scene_render(void);
bool DRW_state_is_opengl_render(void);
bool DRW_state_is_playback(void);
+bool DRW_state_is_navigating(void);
bool DRW_state_show_text(void);
bool DRW_state_draw_support(void);
bool DRW_state_draw_background(void);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index cc618c76ccd..b265035f449 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2575,6 +2575,15 @@ bool DRW_state_is_playback(void)
}
/**
+ * Is the user navigating the region.
+ */
+bool DRW_state_is_navigating(void)
+{
+ const RegionView3D *rv3d = DST.draw_ctx.rv3d;
+ return (rv3d) && (rv3d->rflag & (RV3D_NAVIGATING | RV3D_PAINTING));
+}
+
+/**
* Should text draw in this mode?
*/
bool DRW_state_show_text(void)