diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2020-05-14 15:30:34 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2020-05-14 15:30:34 +0300 |
commit | 236794d07a707a5cf4b8aff9d441f88590d69901 (patch) | |
tree | eb309de08263b2c0c5b4928ee1f112b1c3cd60bf /source/blender/draw/engines/workbench | |
parent | c9360b239bc7ebe09721b7d740995f01ee7d8bb3 (diff) | |
parent | 7965c735f12b885803933363e9b1ca8e85067af6 (diff) |
Merge branch 'blender-v2.83-release'
Diffstat (limited to 'source/blender/draw/engines/workbench')
3 files changed, 13 insertions, 2 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c index 5c8730ac8f9..d2bd653a656 100644 --- a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c +++ b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c @@ -176,6 +176,14 @@ void workbench_antialiasing_engine_init(WORKBENCH_Data *vedata) } } + /* Reset the TAA when we have already draw a sample, but the sample count differs from previous + * time. This removes render artifacts when the viewport anti-aliasing in the user preferences is + * set to a lower value. */ + if (wpd->taa_sample_len != wpd->taa_sample_len_previous) { + wpd->taa_sample = 0; + wpd->taa_sample_len_previous = wpd->taa_sample_len; + } + if (wpd->view_updated) { wpd->taa_sample = 0; wpd->view_updated = false; diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/workbench_engine.c index e75ba80608b..270a33fdd85 100644 --- a/source/blender/draw/engines/workbench/workbench_engine.c +++ b/source/blender/draw/engines/workbench/workbench_engine.c @@ -55,6 +55,7 @@ void workbench_engine_init(void *ved) if (!stl->wpd) { stl->wpd = MEM_callocN(sizeof(*stl->wpd), __func__); + stl->wpd->taa_sample_len_previous = -1; stl->wpd->view_updated = true; } @@ -118,7 +119,7 @@ static void workbench_cache_sculpt_populate(WORKBENCH_PrivateData *wpd, if (use_single_drawcall) { DRWShadingGroup *grp = workbench_material_setup(wpd, ob, 0, color_type, NULL); - DRW_shgroup_call_sculpt(grp, ob, false, false, use_vcol); + DRW_shgroup_call_sculpt(grp, ob, false, false); } else { const int materials_len = DRW_cache_object_material_count_get(ob); @@ -126,7 +127,7 @@ static void workbench_cache_sculpt_populate(WORKBENCH_PrivateData *wpd, for (int i = 0; i < materials_len; i++) { shgrps[i] = workbench_material_setup(wpd, ob, i + 1, color_type, NULL); } - DRW_shgroup_call_sculpt_with_materials(shgrps, materials_len, ob, false); + DRW_shgroup_call_sculpt_with_materials(shgrps, materials_len, ob); } } diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h index 2191e09bc24..967bdf9bae0 100644 --- a/source/blender/draw/engines/workbench/workbench_private.h +++ b/source/blender/draw/engines/workbench/workbench_private.h @@ -261,6 +261,8 @@ typedef struct WORKBENCH_PrivateData { /* Temporal Antialiasing */ /** Total number of samples to after which TAA stops accumulating samples. */ int taa_sample_len; + /** Total number of samples of the previous TAA. When changed TAA will be reset. */ + int taa_sample_len_previous; /** Current TAA sample index in [0..taa_sample_len[ range. */ int taa_sample; /** Inverse of taa_sample to divide the accumulation buffer. */ |