breezy-desktop icon indicating copy to clipboard operation
breezy-desktop copied to clipboard

[FR]: Improved zoom capabilities of virtual display

Open LeifAndersen opened this issue 1 year ago • 5 comments

I have very poor vision, and I was hoping to use the this tool to help me see my screen.

Right now, when I increase the values of: sideview_display_size (and display_zoom) to values greater than 1, the edges of the screen get cut off. This makes sense when smooth follow is turned off, but when its turned on I would expect to be able to see the edges of the display momentarily before the display catches up.

Side note, it would be useful if sideview_smooth_follow_enabled (and virtual_display_smooth_follow_enabled) could contain numerical values rather than just true/false. That way we can set the speed in which the 'virtual follow' works. That way more time could be spent looking at the edges of the screen before it shifts back to the center.

Either way though, thanks for the work done so far, its pretty amazing.

LeifAndersen avatar Apr 16 '24 02:04 LeifAndersen

sideview_display_size isn't intended to go over 1.0, but display_zoom is, so it shouldn't be cropped off the edges. I'll look a little closer into this.

wheaney avatar Apr 16 '24 02:04 wheaney

This actually isn't surprising, because sideview existed before smooth follow, so when I built that portion of the shader I didn't think you'd ever be able to see beyond the edge.

wheaney avatar Apr 16 '24 02:04 wheaney

So the problem is this:

  1. The virtual_display plugin and shader (IMUAdjust.fx) have the proper logic to do zoom. I actually enable the virtual_display plugin to do smooth follow since smooth follow is just a virtual display that tracks.
  2. Since the user isn't actually opting to use virtual_display mode (it's technically not enabled), I ignore all other settings that the IMUAdjust shader has support for, including zoom. I called it "passthrough" for this reason, it's just stealing the screen movement logic and nothing else. The ignoring (or, rather, resetting) of configs is explicitly done here.

Properly enabling zoom would build on this in a way I'm not super fond of by allowing the passthrough mode to utilize a setting from follow mode. I'm not fond of it because it's no longer just a passthrough, but instead is becoming more "aware" of the other mode, and they really should be distinct. I think the proper fix would be to pull the relevant virtual_display bits out into re-usable functions for the follow plugin and shader to use. That's a lot of work for just one setting, though... so maybe we should just go the route of adding it to passthrough mode.

wheaney avatar Apr 16 '24 03:04 wheaney

I've made the necessary updates in the v0.12 driver release. Will update this ticket as it makes its way through Breezy and decky.

wheaney avatar Sep 10 '24 04:09 wheaney

This change is in the latest release of Breezy GNOME and Vulkan now (v0.12). It'll take a bit to get to decky as it requires changes to the UI and a deployment, which I won't get to until I've wrapped up the changes needed for the all-of-game-mode steam deck task.

wheaney avatar Sep 10 '24 22:09 wheaney