From da8c83d803ade16bc623a4d7e87d0691d1c28e69 Mon Sep 17 00:00:00 2001 From: Erik Reider <35975961+ErikReider@users.noreply.github.com> Date: Wed, 26 Jul 2023 00:25:46 +0200 Subject: [PATCH] Fixed blur not switching FB --- include/sway/desktop/fx_renderer/fx_renderer.h | 3 +-- sway/desktop/fx_renderer/fx_renderer.c | 6 +++--- sway/desktop/render.c | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/include/sway/desktop/fx_renderer/fx_renderer.h b/include/sway/desktop/fx_renderer/fx_renderer.h index 893e3c7e..964cef3e 100644 --- a/include/sway/desktop/fx_renderer/fx_renderer.h +++ b/include/sway/desktop/fx_renderer/fx_renderer.h @@ -189,6 +189,5 @@ void fx_render_box_shadow(struct fx_renderer *renderer, const struct wlr_box *bo const float color[static 4], const float matrix[static 9], int radius, float blur_sigma); -void fx_render_main_buffer_blur(struct fx_renderer *renderer, const float gl_matrix[static 9], pixman_region32_t *damage, const struct wlr_box *dst_box, struct fx_framebuffer *current_buffer, int blur_radius, int blur_passes); - +void fx_render_main_buffer_blur(struct fx_renderer *renderer, const float gl_matrix[static 9], pixman_region32_t *damage, const struct wlr_box *dst_box, struct fx_framebuffer **current_buffer, int blur_radius, int blur_passes); #endif diff --git a/sway/desktop/fx_renderer/fx_renderer.c b/sway/desktop/fx_renderer/fx_renderer.c index 37100f0b..a941a804 100644 --- a/sway/desktop/fx_renderer/fx_renderer.c +++ b/sway/desktop/fx_renderer/fx_renderer.c @@ -877,7 +877,7 @@ void fx_render_blur_segments(struct fx_renderer *renderer, } } -void fx_render_main_buffer_blur(struct fx_renderer *renderer, const float gl_matrix[static 9], pixman_region32_t *damage, const struct wlr_box *dst_box, struct fx_framebuffer *current_buffer, int blur_radius, int blur_passes) { +void fx_render_main_buffer_blur(struct fx_renderer *renderer, const float gl_matrix[static 9], pixman_region32_t *damage, const struct wlr_box *dst_box, struct fx_framebuffer **current_buffer, int blur_radius, int blur_passes) { // damage region will be scaled, make a temp pixman_region32_t tempDamage; pixman_region32_init(&tempDamage); @@ -885,7 +885,7 @@ void fx_render_main_buffer_blur(struct fx_renderer *renderer, const float gl_mat // Downscale for (int i = 0; i < blur_passes; ++i) { wlr_region_scale(&tempDamage, damage, 1.0f / (1 << (i + 1))); - fx_render_blur_segments(renderer, gl_matrix, &tempDamage, ¤t_buffer, + fx_render_blur_segments(renderer, gl_matrix, &tempDamage, current_buffer, &renderer->shaders.blur1, dst_box, blur_radius); } @@ -893,7 +893,7 @@ void fx_render_main_buffer_blur(struct fx_renderer *renderer, const float gl_mat for (int i = blur_passes - 1; i >= 0; --i) { // when upsampling we make the region twice as big wlr_region_scale(&tempDamage, damage, 1.0f / (1 << i)); - fx_render_blur_segments(renderer, gl_matrix, &tempDamage, ¤t_buffer, + fx_render_blur_segments(renderer, gl_matrix, &tempDamage, current_buffer, &renderer->shaders.blur2, dst_box, blur_radius); } diff --git a/sway/desktop/render.c b/sway/desktop/render.c index d68878e4..e53f4b7a 100644 --- a/sway/desktop/render.c +++ b/sway/desktop/render.c @@ -209,7 +209,7 @@ struct fx_framebuffer *render_main_buffer_blur(struct sway_output *output, int blur_radius = config->blur_params.radius; int blur_passes = config->blur_params.num_passes; - fx_render_main_buffer_blur(renderer, gl_matrix, &damage, dst_box, current_buffer, blur_radius, blur_passes); + fx_render_main_buffer_blur(renderer, gl_matrix, &damage, dst_box, ¤t_buffer, blur_radius, blur_passes); pixman_region32_fini(&damage);