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:
authorClément Foucault <foucault.clem@gmail.com>2020-10-14 20:18:24 +0300
committerJeroen Bakker <jeroen@blender.org>2020-10-28 11:05:52 +0300
commit89b5c9d433793ba7f34ee9b9f3008cd0a4608374 (patch)
tree6ca2ae3c718115016ff45d89c9ccc29c65fc231e
parentf994c8c70738f7a656bd1e72e5c7ddf59468e7fd (diff)
Fix T81633 Workbench: TAA never resolve when enabling both X-Ray and cavity
This was caused by a wrong flag equality check when in xray mode because the xray mode was masking the effect option flags that are not supported in this mode. This means the never passed and the TAA was reset before every redraw, leading to infinite rendering.
-rw-r--r--source/blender/draw/engines/workbench/workbench_data.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c
index 2e8119fca2f..413e701fb91 100644
--- a/source/blender/draw/engines/workbench/workbench_data.c
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -215,14 +215,21 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
}
if (!v3d || (v3d->shading.type == OB_RENDER && BKE_scene_uses_blender_workbench(scene))) {
+ short shading_flag = scene->display.shading.flag;
+ if (XRAY_FLAG_ENABLED((&scene->display))) {
+ /* Disable shading options that aren't supported in transparency mode. */
+ shading_flag &= ~(V3D_SHADING_SHADOW | V3D_SHADING_CAVITY | V3D_SHADING_DEPTH_OF_FIELD);
+ }
+
/* FIXME: This reproduce old behavior when workbench was separated in 2 engines.
* But this is a workaround for a missing update tagging from operators. */
- if ((v3d && (XRAY_ENABLED(v3d) != XRAY_ENABLED(&scene->display))) ||
- (scene->display.shading.flag != wpd->shading.flag)) {
+ if ((XRAY_ENABLED(wpd) != XRAY_ENABLED(&scene->display)) ||
+ (shading_flag != wpd->shading.flag)) {
wpd->view_updated = true;
}
wpd->shading = scene->display.shading;
+ wpd->shading.flag = shading_flag;
if (XRAY_FLAG_ENABLED((&scene->display))) {
wpd->shading.xray_alpha = XRAY_ALPHA((&scene->display));
}
@@ -242,13 +249,20 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
}
}
else {
+ short shading_flag = v3d->shading.flag;
+ if (XRAY_ENABLED(v3d)) {
+ /* Disable shading options that aren't supported in transparency mode. */
+ shading_flag &= ~(V3D_SHADING_SHADOW | V3D_SHADING_CAVITY | V3D_SHADING_DEPTH_OF_FIELD);
+ }
+
/* FIXME: This reproduce old behavior when workbench was separated in 2 engines.
* But this is a workaround for a missing update tagging from operators. */
- if (XRAY_ENABLED(v3d) != XRAY_ENABLED(wpd) || v3d->shading.flag != wpd->shading.flag) {
+ if (XRAY_ENABLED(v3d) != XRAY_ENABLED(wpd) || shading_flag != wpd->shading.flag) {
wpd->view_updated = true;
}
wpd->shading = v3d->shading;
+ wpd->shading.flag = shading_flag;
if (wpd->shading.type < OB_SOLID) {
wpd->shading.xray_alpha = 0.0f;
}