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
path: root/source
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-09-14 12:59:58 +0300
committerJeroen Bakker <jeroen@blender.org>2020-09-16 15:20:51 +0300
commit0f928c5841671e119ad34c04cad5afc567414720 (patch)
tree44ad1aa3616088f16d2e081c742f1d4185302e82 /source
parentde0fc2a540c75d10538e4ebaf0280f61efb13dd1 (diff)
Fix T80603 Workbench: Inverted alpha when rendering
The state of the passes was not set back after the first sample. This is a simpler fix than rBecfbc5fb55d5 which needs the new draw manager features from 2.90.
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/engines/workbench/workbench_transparent.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_transparent.c b/source/blender/draw/engines/workbench/workbench_transparent.c
index 39aa721a41c..1f51e02c3da 100644
--- a/source/blender/draw/engines/workbench/workbench_transparent.c
+++ b/source/blender/draw/engines/workbench/workbench_transparent.c
@@ -162,12 +162,15 @@ void workbench_transparent_draw_depth_pass(WORKBENCH_Data *data)
if (do_transparent_depth_pass) {
DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL;
+ DRWState state_oit = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND_OIT;
if (!DRW_pass_is_empty(psl->transp_accum_ps)) {
GPU_framebuffer_bind(fbl->opaque_fb);
/* TODO(fclem) Disable writting to first two buffers. Unecessary waste of bandwidth. */
DRW_pass_state_set(psl->transp_accum_ps, state | wpd->cull_state | wpd->clip_state);
DRW_draw_pass(psl->transp_accum_ps);
+ /* Set the state back to original. */
+ DRW_pass_state_set(psl->transp_accum_ps, state_oit | wpd->cull_state | wpd->clip_state);
}
if (!DRW_pass_is_empty(psl->transp_accum_infront_ps)) {
@@ -175,6 +178,9 @@ void workbench_transparent_draw_depth_pass(WORKBENCH_Data *data)
/* TODO(fclem) Disable writting to first two buffers. Unecessary waste of bandwidth. */
DRW_pass_state_set(psl->transp_accum_infront_ps, state | wpd->cull_state | wpd->clip_state);
DRW_draw_pass(psl->transp_accum_infront_ps);
+ /* Set the state back to original. */
+ DRW_pass_state_set(psl->transp_accum_infront_ps,
+ state_oit | wpd->cull_state | wpd->clip_state);
}
}
}