diff --git a/CHANGES b/CHANGES index 518fc1fb..00ad4b55 100644 --- a/CHANGES +++ b/CHANGES @@ -2,19 +2,19 @@ Louvre (2.4.0-1) # API Additions - * Added LOutput::setCustomScanoutBuffer() allowing direct scanout of fullscreen textures, reducing GPU consumption and latency. + * Added LOutput::setCustomScanoutBuffer() for direct scanout of fullscreen textures, reducing GPU consumption and latency. # Examples * louvre-views & louvre-weston-clone now use direct scanout for session lock and fullscreen surfaces when possible. - * louvre-views: Prevented unnecessary update of SSD toplevels titles during resizing, which caused slowdowns. - * louvre-views: Prevented unnecessary repainting of offscreen scene views during toplevel fullscreen/unfullscreen animations. - * louvre-views: Added louvre.desktop file to enable starting louvre-views as a Wayland session. + * louvre-views: Reduced unnecessary SSD title updates during window resizing to prevent slowdowns. + * louvre-views: Minimized repainting of offscreen scene views during fullscreen/unfullscreen animations. + * louvre-views: Introduced louvre.desktop file for launching louvre-views as a Wayland session. # Bug Fixes - * Properly position the title bar of fullscreen toplevels when the X offset of the output is not 0. - * Wayland backend: Disabled custom user cursor sizes when emulating hardware composition due to issues with cursor size perception on the parent compositor. + * Corrected title bar positioning for fullscreen windows when the X offset of the parent output exceeds 0. + * Addressed issues with cursor size perception in Wayland backend when emulating hardware composition. # Internal Changes diff --git a/README.md b/README.md index ef7ea052..e51f3577 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Fortunately, Louvre simplifies this intricate process by handling all the comple ## ⭐ Features * Fractional Scaling (with optional oversampling) +* Direct Scanout (primary plane) * VSync Control * Gamma Correction * Screencasting (compatible with PipeWire via xdg-desktop-portal-wlr) @@ -156,8 +157,7 @@ Similarly as with CPU consumption, we can observe that Louvre uses fewer GPU res * XDG activation Protocol * Idle Notify Protocol * Cursor Shape Protocol -* Direct Buffer Scanout -* DRM Planes Control +* DRM Overlay Planes Control * Rootless XWayland * DRM Lease Protocol * Tablet Events Protocol diff --git a/src/examples/louvre-views/src/Global.cpp b/src/examples/louvre-views/src/Global.cpp index 5979acbe..b294a793 100644 --- a/src/examples/louvre-views/src/Global.cpp +++ b/src/examples/louvre-views/src/Global.cpp @@ -607,7 +607,7 @@ void G::reparentWithSubsurfaces(Surface *surf, LView *newParent, bool onlySubsur } } -void G::arrangeOutputs() +void G::arrangeOutputs(Output *caller) noexcept { Int32 x = 0; @@ -616,6 +616,9 @@ void G::arrangeOutputs() o->setPos(LPoint(x, 0)); x += o->size().w(); o->repaint(); + + if (caller && o != caller) + o->moveGL(); } } diff --git a/src/examples/louvre-views/src/Global.h b/src/examples/louvre-views/src/Global.h index e8340765..9fa07b9a 100644 --- a/src/examples/louvre-views/src/Global.h +++ b/src/examples/louvre-views/src/Global.h @@ -239,7 +239,7 @@ class G static void enableClippingChildren(LView *parent, bool enabled); static Output *mostIntersectedOuput(LView *view); static void reparentWithSubsurfaces(Surface *surf, LView *newParent, bool onlySubsurfaces = true); - static void arrangeOutputs(); + static void arrangeOutputs(Output *caller = nullptr) noexcept; static class Toplevel *searchFullscreenParent(Surface *parent); static void repositionNonVisibleToplevelChildren(Output *target, Surface *toplevel); }; diff --git a/src/examples/louvre-views/src/Output.cpp b/src/examples/louvre-views/src/Output.cpp index e70e7532..581a69ef 100644 --- a/src/examples/louvre-views/src/Output.cpp +++ b/src/examples/louvre-views/src/Output.cpp @@ -50,7 +50,7 @@ void Output::initializeGL() void Output::resizeGL() { - G::arrangeOutputs(); + G::arrangeOutputs(this); updateWorkspacesPos(); setWorkspace(currentWorkspace, 1); topbar.updateOutputInfo();