diff options
author | William McKinnon <[email protected]> | 2023-09-06 00:32:08 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2023-09-06 00:32:08 -0400 |
commit | 6f6991a1b38b03e87fd3f73607ca2393ae62cfea (patch) | |
tree | fcb05d87a897f167f57142877aa7e2003d32bf82 /include | |
parent | 13eeea5ed5f569eb8a9af329af8a7f6b4b0b114e (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.h | 24 | ||||
-rw-r--r-- | include/sway/tree/workspace.h | 3 |
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); |