summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorWilliam McKinnon <[email protected]>2023-09-06 00:32:08 -0400
committerGitHub <[email protected]>2023-09-06 00:32:08 -0400
commit6f6991a1b38b03e87fd3f73607ca2393ae62cfea (patch)
treefcb05d87a897f167f57142877aa7e2003d32bf82 /include
parent13eeea5ed5f569eb8a9af329af8a7f6b4b0b114e (diff)
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 <[email protected]>
Diffstat (limited to 'include')
-rw-r--r--include/sway/desktop/fx_renderer/fx_renderer.h24
-rw-r--r--include/sway/tree/workspace.h3
2 files changed, 20 insertions, 7 deletions
diff --git a/include/sway/desktop/fx_renderer/fx_renderer.h b/include/sway/desktop/fx_renderer/fx_renderer.h
index 4a60a7ea..67dc6adf 100644
--- a/include/sway/desktop/fx_renderer/fx_renderer.h
+++ b/include/sway/desktop/fx_renderer/fx_renderer.h
@@ -120,12 +120,22 @@ struct fx_renderer {
int viewport_width, viewport_height;
- struct fx_framebuffer wlr_buffer; // Just the framebuffer used by wlroots
- struct fx_framebuffer main_buffer; // The main FB used for rendering
- struct fx_framebuffer blur_buffer; // Contains the blurred background for tiled windows
+ struct wlr_output *wlr_output;
+
+ // The framebuffer used by wlroots
+ struct fx_framebuffer wlr_buffer;
+ // Contains the blurred background for tiled windows
+ struct fx_framebuffer blur_buffer;
+ // Contains the original pixels to draw over the areas where artifact are visible
+ struct fx_framebuffer blur_saved_pixels_buffer;
// Blur swaps between the two effects buffers everytime it scales the image
- struct fx_framebuffer effects_buffer; // Buffer used for effects
- struct fx_framebuffer effects_buffer_swapped; // Swap buffer used for effects
+ // Buffer used for effects
+ struct fx_framebuffer effects_buffer;
+ // Swap buffer used for effects
+ struct fx_framebuffer effects_buffer_swapped;
+
+ // The region where there's blur
+ pixman_region32_t blur_padding_region;
bool blur_buffer_dirty;
@@ -155,12 +165,14 @@ struct fx_renderer {
} shaders;
};
-struct fx_renderer *fx_renderer_create(struct wlr_egl *egl);
+struct fx_renderer *fx_renderer_create(struct wlr_egl *egl, struct wlr_output *output);
void fx_renderer_fini(struct fx_renderer *renderer);
void fx_renderer_begin(struct fx_renderer *renderer, int width, int height);
+void fx_renderer_end(struct fx_renderer *renderer);
+
void fx_renderer_clear(const float color[static 4]);
void fx_renderer_scissor(struct wlr_box *box);
diff --git a/include/sway/tree/workspace.h b/include/sway/tree/workspace.h
index 2ff51ea3..d25afbb2 100644
--- a/include/sway/tree/workspace.h
+++ b/include/sway/tree/workspace.h
@@ -92,7 +92,8 @@ struct sway_output *workspace_output_get_highest_available(
void workspace_detect_urgent(struct sway_workspace *workspace);
-bool should_workspace_have_blur(struct sway_workspace *ws);
+bool workspace_get_blur_info(struct sway_workspace *ws,
+ pixman_region32_t *blur_region);
void workspace_for_each_container(struct sway_workspace *ws,
void (*f)(struct sway_container *con, void *data), void *data);