diff --git a/include/sway/config.h b/include/sway/config.h index 2bb33352..de49bbff 100644 --- a/include/sway/config.h +++ b/include/sway/config.h @@ -773,6 +773,8 @@ int config_get_blur_size(); bool config_should_parameters_blur(); +bool config_should_parameters_blur_effects(); + bool config_should_parameters_shadow(); /* Global config singleton. */ diff --git a/sway/config.c b/sway/config.c index 58d243e2..0203080c 100644 --- a/sway/config.c +++ b/sway/config.c @@ -1109,6 +1109,13 @@ bool config_should_parameters_blur() { return config->blur_params.radius > 0 && config->blur_params.num_passes > 0; } +bool config_should_parameters_blur_effects() { + return config->blur_params.brightness != 1.0f + || config->blur_params.saturation != 1.0f + || config->blur_params.contrast != 1.0f + || config->blur_params.noise > 0.0f; +} + bool config_should_parameters_shadow() { return config->shadow_blur_sigma > 0 && config->shadow_color[3] > 0.0; } diff --git a/sway/desktop/fx_renderer/fx_renderer.c b/sway/desktop/fx_renderer/fx_renderer.c index 089e1693..f06d93b5 100644 --- a/sway/desktop/fx_renderer/fx_renderer.c +++ b/sway/desktop/fx_renderer/fx_renderer.c @@ -930,7 +930,6 @@ void fx_render_blur_effects(struct fx_renderer *renderer, const float matrix[sta float blur_contrast, float blur_saturation) { struct effects_shader shader = renderer->shaders.blur_effects; - glEnable(GL_BLEND); glActiveTexture(GL_TEXTURE0); glBindTexture((*buffer)->texture.target, (*buffer)->texture.id); glTexParameteri((*buffer)->texture.target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); diff --git a/sway/desktop/render.c b/sway/desktop/render.c index 391533c5..e1deb33b 100644 --- a/sway/desktop/render.c +++ b/sway/desktop/render.c @@ -263,7 +263,13 @@ struct fx_framebuffer *get_main_buffer_blur(struct fx_renderer *renderer, struct float blur_contrast = config->blur_params.contrast; float blur_saturation = config->blur_params.saturation; - if (pixman_region32_not_empty(&damage)) { + // Render additional blur effects like saturation, noise, contrast, etc... + if (config_should_parameters_blur_effects() && pixman_region32_not_empty(&damage)) { + if (current_buffer == &renderer->effects_buffer) { + fx_framebuffer_bind(&renderer->effects_buffer_swapped); + } else { + fx_framebuffer_bind(&renderer->effects_buffer); + } int nrects; pixman_box32_t *rects = pixman_region32_rectangles(&damage, &nrects); for (int i = 0; i < nrects; ++i) { @@ -273,6 +279,11 @@ struct fx_framebuffer *get_main_buffer_blur(struct fx_renderer *renderer, struct fx_render_blur_effects(renderer, gl_matrix, ¤t_buffer, blur_noise, blur_brightness, blur_contrast, blur_saturation); } + if (current_buffer != &renderer->effects_buffer) { + current_buffer = &renderer->effects_buffer; + } else { + current_buffer = &renderer->effects_buffer_swapped; + } } pixman_region32_fini(&tempDamage);