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>2019-06-27 15:40:29 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-06-27 15:41:35 +0300
commit2a22b8af04eb2edccfd3d378b8e279bec54639e0 (patch)
treea87fc64f39a65f46b1cacd1927c3896c332fce8c /source/blender/draw/engines/eevee/eevee_volumes.c
parent1f4e9754c02891076ffe5c29a2d7c030aace219c (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.c18
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);
}
}