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 <jeroen@blender.org>2020-09-01 12:48:37 +0300
committerJeroen Bakker <jeroen@blender.org>2020-09-02 14:03:06 +0300
commitfeb4b645d70ec8ad5c3f91a957738a9fba4054f0 (patch)
tree4868e334b328f4dbfd81ff1dff531fe2d3834efb /source/blender/draw/engines/eevee/eevee_shaders.c
parentd851b38185c1777287a19618c7fd103ad18e15f3 (diff)
EEVEE: Shader tests for Depth of Field
This patch moves the EEVEE depth of field shaders to eevee_shaders.c and adds them to the eevee shaders test suite. Reviewed By: Clément Foucault Differential Revision: https://developer.blender.org/D8771
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_shaders.c')
-rw-r--r--source/blender/draw/engines/eevee/eevee_shaders.c65
1 files changed, 64 insertions, 1 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_shaders.c b/source/blender/draw/engines/eevee/eevee_shaders.c
index 6c90d6325a0..37c43f9f6ef 100644
--- a/source/blender/draw/engines/eevee/eevee_shaders.c
+++ b/source/blender/draw/engines/eevee/eevee_shaders.c
@@ -75,6 +75,11 @@ static struct {
struct GPUShader *bloom_upsample_sh[2];
struct GPUShader *bloom_resolve_sh[2];
+ /* Depth Of Field */
+ struct GPUShader *dof_downsample_sh[2];
+ struct GPUShader *dof_scatter_sh[2];
+ struct GPUShader *dof_resolve_sh[2];
+
/* General purpose Shaders. */
struct GPUShader *lookdev_background;
struct GPUShader *update_noise_sh;
@@ -411,6 +416,10 @@ GPUShader *EEVEE_shaders_taa_resolve_sh_get(EEVEE_EffectsFlag enabled_effects)
return *sh;
}
+/* -------------------------------------------------------------------- */
+/** \name Bloom
+ * \{ */
+
GPUShader *EEVEE_shaders_bloom_blit_get(bool high_quality)
{
int index = high_quality ? 1 : 0;
@@ -467,6 +476,58 @@ GPUShader *EEVEE_shaders_bloom_resolve_get(bool high_quality)
return e_data.bloom_resolve_sh[index];
}
+/* \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Depth of field
+ * \{ */
+
+GPUShader *EEVEE_shaders_depth_of_field_downsample_get(bool use_alpha)
+{
+ int index = use_alpha ? 1 : 0;
+ if (e_data.dof_downsample_sh[index] == NULL) {
+ e_data.dof_downsample_sh[index] = DRW_shader_create_fullscreen_with_shaderlib(
+ datatoc_effect_dof_frag_glsl,
+ e_data.lib,
+ use_alpha ? "#define USE_ALPHA_DOF\n"
+ "#define STEP_DOWNSAMPLE\n" :
+ "#define STEP_DOWNSAMPLE\n");
+ }
+ return e_data.dof_downsample_sh[index];
+}
+
+GPUShader *EEVEE_shaders_depth_of_field_scatter_get(bool use_alpha)
+{
+ int index = use_alpha ? 1 : 0;
+ if (e_data.dof_scatter_sh[index] == NULL) {
+ e_data.dof_scatter_sh[index] = DRW_shader_create_with_shaderlib(datatoc_effect_dof_vert_glsl,
+ NULL,
+ datatoc_effect_dof_frag_glsl,
+ e_data.lib,
+ use_alpha ?
+ "#define USE_ALPHA_DOF\n"
+ "#define STEP_SCATTER\n" :
+ "#define STEP_SCATTER\n");
+ }
+ return e_data.dof_scatter_sh[index];
+}
+
+GPUShader *EEVEE_shaders_depth_of_field_resolve_get(bool use_alpha)
+{
+ int index = use_alpha ? 1 : 0;
+ if (e_data.dof_resolve_sh[index] == NULL) {
+ e_data.dof_resolve_sh[index] = DRW_shader_create_fullscreen_with_shaderlib(
+ datatoc_effect_dof_frag_glsl,
+ e_data.lib,
+ use_alpha ? "#define USE_ALPHA_DOF\n"
+ "#define STEP_RESOLVE\n" :
+ "#define STEP_RESOLVE\n");
+ }
+ return e_data.dof_resolve_sh[index];
+}
+
+/* \} */
+
Material *EEVEE_material_default_diffuse_get(void)
{
if (!e_data.diffuse_mat) {
@@ -833,12 +894,14 @@ void EEVEE_shaders_free(void)
DRW_SHADER_FREE_SAFE(e_data.velocity_resolve_sh);
DRW_SHADER_FREE_SAFE(e_data.taa_resolve_sh);
DRW_SHADER_FREE_SAFE(e_data.taa_resolve_reproject_sh);
-
for (int i = 0; i < 2; i++) {
DRW_SHADER_FREE_SAFE(e_data.bloom_blit_sh[i]);
DRW_SHADER_FREE_SAFE(e_data.bloom_downsample_sh[i]);
DRW_SHADER_FREE_SAFE(e_data.bloom_upsample_sh[i]);
DRW_SHADER_FREE_SAFE(e_data.bloom_resolve_sh[i]);
+ DRW_SHADER_FREE_SAFE(e_data.dof_downsample_sh[i]);
+ DRW_SHADER_FREE_SAFE(e_data.dof_scatter_sh[i]);
+ DRW_SHADER_FREE_SAFE(e_data.dof_resolve_sh[i]);
}
DRW_SHADER_LIB_FREE_SAFE(e_data.lib);