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.
This commit is contained in:
parent
de0fc2a540
commit
0f928c5841
Notes:
blender-bot
2023-02-14 05:16:25 +01:00
Referenced by issue #80603, Inverted alpha when rendering in workbench Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue