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:
authorJeroen Bakker <jbakker>2020-10-07 18:17:19 +0300
committerJeroen Bakker <jeroen@blender.org>2020-10-07 18:26:37 +0300
commit7c373555fd5de16905f52f0b60d46434ea3cbac6 (patch)
tree1a68981de0c90d2be6bd90c3acfc826e4e77e626 /source/blender/draw/engines/eevee/eevee_shaders.c
parentafab33e0b97cc5e5278c3e8af5490b9583c3b95c (diff)
Fix T81254: Incorrect calculation of EEVEE Transmittance Volumetrics
Regular rendering uses a custom blend mode, but render passes renders to 2 separate textures. This wasn't configured correctly inside the fragment shaders. This patch adds a switch to configure the fragment shader with the correct attachments. Backport to Blender 2.83. Reviewed By: Clément Foucault Differential Revision: https://developer.blender.org/D9038
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_shaders.c')
-rw-r--r--source/blender/draw/engines/eevee/eevee_shaders.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_shaders.c b/source/blender/draw/engines/eevee/eevee_shaders.c
index 58897272425..f46a98ed845 100644
--- a/source/blender/draw/engines/eevee/eevee_shaders.c
+++ b/source/blender/draw/engines/eevee/eevee_shaders.c
@@ -137,7 +137,7 @@ static struct {
struct GPUShader *scatter_sh;
struct GPUShader *scatter_with_lights_sh;
struct GPUShader *volumetric_integration_sh;
- struct GPUShader *volumetric_resolve_sh;
+ struct GPUShader *volumetric_resolve_sh[2];
struct GPUShader *volumetric_accum_sh;
/* Shader strings */
@@ -854,13 +854,16 @@ struct GPUShader *EEVEE_shaders_volumes_integration_sh_get()
return e_data.volumetric_integration_sh;
}
-struct GPUShader *EEVEE_shaders_volumes_resolve_sh_get()
+struct GPUShader *EEVEE_shaders_volumes_resolve_sh_get(bool accum)
{
- if (e_data.volumetric_resolve_sh == NULL) {
- e_data.volumetric_resolve_sh = DRW_shader_create_fullscreen_with_shaderlib(
- datatoc_volumetric_resolve_frag_glsl, e_data.lib, SHADER_DEFINES);
+ const int index = accum ? 1 : 0;
+ if (e_data.volumetric_resolve_sh[index] == NULL) {
+ e_data.volumetric_resolve_sh[index] = DRW_shader_create_fullscreen_with_shaderlib(
+ datatoc_volumetric_resolve_frag_glsl,
+ e_data.lib,
+ accum ? "#define VOLUMETRICS_ACCUM\n" SHADER_DEFINES : SHADER_DEFINES);
}
- return e_data.volumetric_resolve_sh;
+ return e_data.volumetric_resolve_sh[index];
}
struct GPUShader *EEVEE_shaders_volumes_accum_sh_get()
@@ -1409,7 +1412,8 @@ void EEVEE_shaders_free(void)
DRW_SHADER_FREE_SAFE(e_data.scatter_sh);
DRW_SHADER_FREE_SAFE(e_data.scatter_with_lights_sh);
DRW_SHADER_FREE_SAFE(e_data.volumetric_integration_sh);
- DRW_SHADER_FREE_SAFE(e_data.volumetric_resolve_sh);
+ DRW_SHADER_FREE_SAFE(e_data.volumetric_resolve_sh[0]);
+ DRW_SHADER_FREE_SAFE(e_data.volumetric_resolve_sh[1]);
DRW_SHADER_FREE_SAFE(e_data.volumetric_accum_sh);
DRW_SHADER_FREE_SAFE(e_data.probe_filter_glossy_sh);
DRW_SHADER_FREE_SAFE(e_data.probe_filter_diffuse_sh);