summaryrefslogtreecommitdiff
path: root/sway/desktop/render.c
diff options
context:
space:
mode:
authorErik Reider <[email protected]>2024-04-18 01:03:25 +0200
committerGitHub <[email protected]>2024-04-18 01:03:25 +0200
commit40a5ebf109ead3f0d9c2fc3ab11a2a62d8ab3fba (patch)
tree63ff8b43b4d5fae659fe6f5ee0ceaa4186306f6c /sway/desktop/render.c
parent8ad2605c65d85ed1821dbb970fe825f676604437 (diff)
Fix segfaults (#291)
* Add NULL checks for effect_fbos * Fix freeing undefined pixman region
Diffstat (limited to 'sway/desktop/render.c')
-rw-r--r--sway/desktop/render.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sway/desktop/render.c b/sway/desktop/render.c
index 34786982..65bf2062 100644
--- a/sway/desktop/render.c
+++ b/sway/desktop/render.c
@@ -1592,6 +1592,9 @@ void output_render(struct fx_render_context *ctx) {
struct sway_output *output = ctx->output;
pixman_region32_t *damage = ctx->output_damage;
+ pixman_region32_t transformed_damage;
+ pixman_region32_init(&transformed_damage);
+
struct fx_effect_framebuffers *effect_fbos = ctx->pass->fx_effect_framebuffers;
struct sway_workspace *workspace = output->current.active_workspace;
@@ -1617,8 +1620,6 @@ void output_render(struct fx_render_context *ctx) {
},
});
}
- pixman_region32_t transformed_damage;
- pixman_region32_init(&transformed_damage);
pixman_region32_copy(&transformed_damage, damage);
transform_output_damage(&transformed_damage, wlr_output);
@@ -1704,7 +1705,7 @@ void output_render(struct fx_render_context *ctx) {
pixman_region32_init(&blur_region);
bool workspace_has_blur = workspace_get_blur_info(workspace, &blur_region);
// Expand the damage to compensate for blur
- if (workspace_has_blur) {
+ if (effect_fbos && workspace_has_blur) {
// Skip the blur artifact prevention if damaging the whole viewport
if (effect_fbos->blur_buffer_dirty) {
// Needs to be extended before clearing
@@ -1765,7 +1766,7 @@ void output_render(struct fx_render_context *ctx) {
// Check if the background needs to be blurred.
// Render optimized/x-ray blur
- if (workspace_has_blur && effect_fbos->blur_buffer_dirty) {
+ if (effect_fbos && workspace_has_blur && effect_fbos->blur_buffer_dirty) {
const float opacity = 1.0f;
struct fx_render_blur_pass_options blur_options = {
.tex_options = {
@@ -1828,7 +1829,7 @@ render_overlay:
renderer_end:
// Not needed if we damaged the whole viewport
- if (!effect_fbos->blur_buffer_dirty) {
+ if (effect_fbos && !effect_fbos->blur_buffer_dirty) {
// Render the saved pixels over the blur artifacts
fx_renderer_read_to_buffer(ctx->pass, &effect_fbos->blur_padding_region,
ctx->pass->buffer, effect_fbos->blur_saved_pixels_buffer, true);