Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WLR Scene] Add blur #33

Merged
merged 39 commits into from
Nov 15, 2024
Merged

[WLR Scene] Add blur #33

merged 39 commits into from
Nov 15, 2024

Conversation

ErikReider
Copy link
Member

@ErikReider ErikReider commented Feb 26, 2024

Depends on #30

Also depends on #66 for the initial shadow_node impl which the blur_node should base off of. Could potentially also add a custom_node impl for both of those effect nodes?

Todo:

  • Figure out the best way for the compositor to know when to rerender the optimized blur
  • tinywl example for optimized blur
  • Make a seperate blur_node instead of forcing it onto a scene_buffer (Will be difficult to separate the discard transparent logic, so we should wait with this)

Tesing:

  • Run tinywl
  • Or run fx-comp (instructions in the README). NOTE: the default keyboard modifier is left alt

@ErikReider ErikReider added the enhancement New feature or request label Feb 26, 2024
@ErikReider ErikReider self-assigned this Feb 26, 2024
types/scene/wlr_scene.c Outdated Show resolved Hide resolved
@ErikReider ErikReider force-pushed the wlr_scene_blur branch 2 times, most recently from f8a24c0 to 39756c6 Compare April 15, 2024 22:32
@ErikReider ErikReider marked this pull request as ready for review May 7, 2024 10:17
@ErikReider
Copy link
Member Author

An optimized blur example in tinywl wouldn't really make it that tiny and simple anymore, so skipping that :)

@ErikReider ErikReider requested a review from WillPower3309 May 7, 2024 10:18
@WillPower3309
Copy link
Member

An optimized blur example in tinywl wouldn't really make it that tiny and simple anymore, so skipping that :)

Understandable, but do you mind running me through what's required on the comp side for getting this to work in scene? I'm following it along but a summary may be helpful

My thinking here is that one of the main goals of scene is for compositors to easily leverage our effects in very few LOC

@ErikReider
Copy link
Member Author

do you mind running me through what's required on the comp side for getting this to work in scene?

So the optimized blur is a new scene node that should be inserted between regular scene trees, which would be between bottom and workspace in sways use-case. The comp is responsible for resizing the node to the desired size, which in most use-cases would be the monitor's size and coordinates.

The comp is also responsible for redrawing the optimized blur by marking it as “dirty”. Sway currently redraws the blur when any background or bottom layer surface commits.

So actually implementing it in a fully fledged comp doesn't require that many LOC, but adding an example in TinyWL would require adding extra non-blur related code (the extra layers and a good way of showing off the optimized blur)

@ErikReider
Copy link
Member Author

Optimized blur (x-ray) example in tinywl is now added. It's very simple but it works good enough to demonstrate what it does and how it works :)

image

Notice how only the white rectangle gets blurred 😉

@ErikReider
Copy link
Member Author

Might want to merge this after 0.2? Would give us some more time to think of a better impl, especially if we get a #60 impl merged

@ErikReider ErikReider marked this pull request as draft September 18, 2024 10:40
@WillPower3309
Copy link
Member

Might want to merge this after 0.2? Would give us some more time to think of a better impl, especially if we get a #60 impl merged

Sounds good to me!

types/fx/blur_data.c Outdated Show resolved Hide resolved
include/scenefx/types/wlr_scene.h Show resolved Hide resolved
include/scenefx/types/wlr_scene.h Show resolved Hide resolved
include/scenefx/types/wlr_scene.h Outdated Show resolved Hide resolved
types/scene/wlr_scene.c Show resolved Hide resolved
types/scene/wlr_scene.c Show resolved Hide resolved
types/scene/wlr_scene.c Show resolved Hide resolved
types/scene/wlr_scene.c Outdated Show resolved Hide resolved
@@ -152,6 +156,12 @@ struct wlr_scene_shadow {
float blur_sigma;
};

/** A scene-graph node telling SceneFX to render the optimized blur */
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should maybe write that it doesn't actually render anything onto the tree

include/scenefx/types/wlr_scene.h Outdated Show resolved Hide resolved
types/scene/wlr_scene.c Show resolved Hide resolved
types/scene/wlr_scene.c Outdated Show resolved Hide resolved
types/scene/wlr_scene.c Show resolved Hide resolved
types/scene/wlr_scene.c Show resolved Hide resolved
@WillPower3309
Copy link
Member

Optimized blur (x-ray) example in tinywl is now added. It's very simple but it works good enough to demonstrate what it does and how it works :)

image

Notice how only the white rectangle gets blurred 😉

both rectangles now seem part of the blurring, other windows are not though so just seems like a layer order thing!

@ErikReider
Copy link
Member Author

both rectangles now seem part of the blurring, other windows are not though so just seems like a layer order thing!

Fixed by 698373b :D

I'll let Will bump the version instead :)
@ErikReider ErikReider merged commit f794f0f into main Nov 15, 2024
@ErikReider ErikReider deleted the wlr_scene_blur branch November 15, 2024 14:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants