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:
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_effects.c')
-rw-r--r--source/blender/draw/engines/eevee/eevee_effects.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index 79b4cb231a8..a4d3bc5b276 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -168,6 +168,11 @@ void EEVEE_effects_init(EEVEE_ViewLayerData *sldata,
effects->enabled_effects |= EFFECT_NORMAL_BUFFER;
}
+ /* Alpha checker if background is not drawn in viewport. */
+ if (!DRW_state_is_image_render() && !DRW_state_draw_background()) {
+ effects->enabled_effects |= EFFECT_ALPHA_CHECKER;
+ }
+
/**
* Ping Pong buffer
*/
@@ -361,6 +366,23 @@ void EEVEE_effects_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
DRW_shgroup_uniform_mat4(grp, "pastPersmat", effects->velocity_past_persmat);
DRW_shgroup_call_add(grp, quad, NULL);
}
+
+ if ((effects->enabled_effects & EFFECT_ALPHA_CHECKER) != 0) {
+ psl->alpha_checker = DRW_pass_create("Alpha Checker",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_PREMUL_UNDER);
+
+ GPUShader *checker_sh = GPU_shader_get_builtin_shader(GPU_SHADER_2D_CHECKER);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(checker_sh, psl->alpha_checker);
+
+ copy_v4_fl4(effects->color_checker_dark, 0.15f, 0.15f, 0.15f, 1.0f);
+ copy_v4_fl4(effects->color_checker_light, 0.2f, 0.2f, 0.2f, 1.0f);
+
+ DRW_shgroup_uniform_vec4(grp, "color1", effects->color_checker_dark, 1);
+ DRW_shgroup_uniform_vec4(grp, "color2", effects->color_checker_light, 1);
+ DRW_shgroup_uniform_int_copy(grp, "size", 8);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
}
#if 0 /* Not required for now */
@@ -491,6 +513,26 @@ void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, GPUTexture *texture_src, i
DRW_stats_group_end();
}
+void EEVEE_draw_alpha_checker(EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_ALPHA_CHECKER) != 0) {
+ float mat[4][4];
+ unit_m4(mat);
+
+ /* Fragile, rely on the fact that GPU_SHADER_2D_CHECKER
+ * only use the persmat. */
+ DRW_viewport_matrix_override_set(mat, DRW_MAT_PERS);
+
+ DRW_draw_pass(psl->alpha_checker);
+
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERS);
+ }
+}
+
void EEVEE_draw_effects(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
{
EEVEE_PassList *psl = vedata->psl;