From 6f6991a1b38b03e87fd3f73607ca2393ae62cfea Mon Sep 17 00:00:00 2001 From: William McKinnon Date: Wed, 6 Sep 2023 00:32:08 -0400 Subject: refactor: simplify blur (#219) * refactor: removed surface_width + surface_height from render_blur() * Fixed scaling issues * Minor refactors * removed scaled_dst box * removed uneeded fb bind * removed unneeded src_box * removed unneeded wlr_fbox_from_box function * removed src_box * Don't scale the blur translucent region twice * Renamed extended_damage to original_damage to reflect better what it actually is * Removed unneeded clearing of the wlr fbo before rendering onto it * Removed the need for our own main FBO, also fixes some damage bugs * Simplified detection of blur on workspace * cleaned up comments --------- Co-authored-by: Erik Reider <35975961+ErikReider@users.noreply.github.com> --- sway/desktop/output.c | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) (limited to 'sway/desktop/output.c') diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 5d61186f..911bffbb 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -697,36 +697,6 @@ static void damage_surface_iterator(struct sway_output *output, } pixman_region32_translate(&damage, box.x, box.y); - // Extend view/layer damage size - int effect_size = 0; - if (view && view->container->blur_enabled) { - // Don't check for shadow, gets extended in `output_damage_whole_container` - effect_size = config_get_blur_size(); - } else if (wlr_surface_is_layer_surface(surface)) { - struct wlr_layer_surface_v1 *layer = wlr_layer_surface_v1_from_wlr_surface(surface); - struct sway_layer_surface *sway_layer = layer_from_wlr_layer_surface_v1(layer); - int blur_size = sway_layer->has_blur? config_get_blur_size(): 0; - int shadow_sigma = sway_layer->has_shadow? config->shadow_blur_sigma: 0; - effect_size = MAX(blur_size, shadow_sigma); - } - if (effect_size > 0) { - if (pixman_region32_not_empty(&damage)) { - int output_width, output_height; - wlr_output_transformed_resolution(output->wlr_output, &output_width, &output_height); - int32_t damage_width = damage.extents.x2 - damage.extents.x1; - int32_t damage_height = damage.extents.y2 - damage.extents.y1; - if (damage_width > output_width || damage_height > output_height) { - pixman_region32_intersect_rect(&damage, &damage, 0, 0, output_width, output_height); - } else { - wlr_region_expand(&damage, &damage, effect_size); - } - } - box.x -= effect_size; - box.y -= effect_size; - box.width += effect_size * 2; - box.height += effect_size * 2; - } - if (wlr_damage_ring_add(&output->damage_ring, &damage)) { wlr_output_schedule_frame(output->wlr_output); } @@ -983,7 +953,7 @@ void handle_new_output(struct wl_listener *listener, void *data) { // Init FX Renderer struct wlr_egl *egl = wlr_gles2_renderer_get_egl(server->wlr_renderer); - output->renderer = fx_renderer_create(egl); + output->renderer = fx_renderer_create(egl, wlr_output); if (!output->renderer) { sway_log(SWAY_ERROR, "Failed to create fx_renderer"); abort(); -- cgit v1.2.3