diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-06-27 15:40:29 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-06-27 15:41:35 +0300 |
commit | 2a22b8af04eb2edccfd3d378b8e279bec54639e0 (patch) | |
tree | a87fc64f39a65f46b1cacd1927c3896c332fce8c /source/blender/draw/engines/eevee/eevee_volumes.c | |
parent | 1f4e9754c02891076ffe5c29a2d7c030aace219c (diff) |
Eevee: Make use of dual source blending for volumetric resolve
This simplify the code and add an example use of dual source
blending.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_volumes.c')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_volumes.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c index 9162a604d7c..79a133ed7fc 100644 --- a/source/blender/draw/engines/eevee/eevee_volumes.c +++ b/source/blender/draw/engines/eevee/eevee_volumes.c @@ -509,11 +509,10 @@ void EEVEE_volumes_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) DRW_shgroup_call_procedural_triangles(grp, NULL, common_data->vol_tex_size[2]); - DRW_PASS_CREATE(psl->volumetric_resolve_ps, DRW_STATE_WRITE_COLOR); + DRW_PASS_CREATE(psl->volumetric_resolve_ps, DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_CUSTOM); grp = DRW_shgroup_create(e_data.volumetric_resolve_sh, psl->volumetric_resolve_ps); DRW_shgroup_uniform_texture_ref(grp, "inScattering", &txl->volume_scatter); DRW_shgroup_uniform_texture_ref(grp, "inTransmittance", &txl->volume_transmit); - DRW_shgroup_uniform_texture_ref(grp, "inSceneColor", &e_data.color_src); DRW_shgroup_uniform_texture_ref(grp, "inSceneDepth", &e_data.depth_src); DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); @@ -638,22 +637,13 @@ void EEVEE_volumes_resolve(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *veda if ((effects->enabled_effects & EFFECT_VOLUMETRIC) != 0) { DefaultTextureList *dtxl = DRW_viewport_texture_list_get(); - - e_data.color_src = txl->color; e_data.depth_src = dtxl->depth; - /* Step 4: Apply for opaque */ - GPU_framebuffer_bind(fbl->effect_color_fb); + /* Apply for opaque geometry. */ + GPU_framebuffer_bind(fbl->main_color_fb); DRW_draw_pass(psl->volumetric_resolve_ps); - /* Swap the buffers and rebind depth to the current buffer */ - SWAP(GPUFrameBuffer *, fbl->main_fb, fbl->effect_fb); - SWAP(GPUFrameBuffer *, fbl->main_color_fb, fbl->effect_color_fb); - SWAP(GPUTexture *, txl->color, txl->color_post); - - /* Restore */ - GPU_framebuffer_texture_detach(fbl->effect_fb, dtxl->depth); - GPU_framebuffer_texture_attach(fbl->main_fb, dtxl->depth, 0, 0); + /* Restore. */ GPU_framebuffer_bind(fbl->main_fb); } } |