Skip to content

Releases: CuarzoSoftware/Louvre

Louvre v1.2.1-2

19 Feb 16:14
e516ddd
Compare
Choose a tag to compare

Louvre (1.2.1-2)

Internal Changes

  • Replaced raw boolean pointer of LObject alive indicator with std::shared_ptr - Thanks to @Paraworker.

Building

  • Fixed header include problem preventing Louvre from building on Musl-based distros - Thanks to @ahmadraniri1994 for reporting the issue.

Building

  • Added a link to a curated list of compositors using Louvre into README.md - Suggested by @wiki-me.

-- Eduardo Hopperdietzel ehopperdietzel@gmail.com Mon, 19 Feb 2024 13:02:10 -0300

Louvre v1.2.0-2

13 Feb 19:59
09f8ee8
Compare
Choose a tag to compare

Louvre (1.2.0-2)

New Protocols

New Features

  • LOutput now supports fractional scales with optional oversampling to reduce aliasing artifacts when necessary.
  • Added VSync disabling capability in LOutput with optional refresh rate limits.
  • LOutput now supports custom gamma correction curves through LOutput::setGamma() and the new LGammaTable class.
  • LPainter has new methods for rendering texture regions with higher precision and applied transforms.
  • LTextureView now supports custom source rects and transforms, see LTextureView::setSrcRect() and LTextureView::setTransform().
  • Introduced LBitset class to reduce memory usage for storing binary conditions.
  • Introduced isKeySymbolPressed() to LKeyboard, allowing querying the state of key symbols instead of raw key codes.

Minor API Changes

  • Replaced most of the non-order-dependent lists with vectors to minimize cache misses.
  • LOutput setBufferDamage() now takes LRegion * as an argument instead of LRegion &.
  • Updated all virtual constructor parameters in LCompositor to const void *.
  • Removed the create() method in LAnimation and LTimer, replaced with class constructors for stack allocation.
  • Replaced LView's paintRect() event with paintEvent().

Graphic Backend

  • The graphic backend modules API has been refactored with a cleaner and more efficient API (this does not affect Louvre public API).

Input Backend

  • The Caps Lock key LED is now automatically toggled based on the state of the keyboard modifiers.

Bug Fixes

  • Resolved a bug causing the compositor to respond to multiple frame callbacks when a client sent multiple frames before waiting for a reply, thanks to @yurikhan for identifying and reporting it.

Examples

  • The louvre-views example now uses a single texture atlas for UI elements instead of individual images.
  • Transitioned most heap-allocated objects to stack allocation.
  • Workspace switching and fullscreen transition animations have undergone optimization, resulting in a smoother visual experience.
  • Added new shortcuts for changing the output transform, scale, mode, and toggling VSync.

Building

  • Updated C++ standard to version 20.
  • SRM dependency now requires version 0.5.2 or later.

Documentation

  • Rewrote most of the tutorial for clearer explanations and code.
  • Created a new repo containing the code of the final result after completing the tutorial.
  • Expanded the tutorial with new chapters on gamma correction, fractional scaling, and VSync.
  • Remove white spaces from code, thanks to @zlice.

-- Eduardo Hopperdietzel ehopperdietzel@gmail.com Tue, 13 Feb 2024 13:28:39 -0300

Louvre v1.1.0-1

18 Dec 23:11
Compare
Choose a tag to compare

Louvre (1.1.0-1)

License

  • License updated from GPLv3 to MIT.

Dependencies

  • Substituted the FreeImage dependency with STB Image.

Building

  • Substituted LConfig.h configuration header with LCompositor methods for querying default assets paths and backends.
  • Incorporated soversion in meson.build.

Minor API Changes

  • The LCompositor loadGraphicBackend() and loadInputBackend() methods now accept const std::string & as an argument instead of const char *.
  • The LToplevelRole appId() and title() methods now return const std::string & instead of const char *.
  • The use of LCompositor::nextSerial() is now deprecated, and LTime::nextSerial() should be used instead.
  • LView::paintRect() now takes an LView::PaintRectParams struct reference as an argument, eliminating the need to pass all parameters by value.
  • The LView::setBlendFunc() method now follows the glBlendFuncSeparate() parameters, enabling a more precise blend function configuration.

Additions

  • Introduce LToplevelRole pendingStates() and pendingSize() methods for querying the last configure() parameters.
  • Introduce the LVersion struct and the LCompositor::version() method to facilitate querying the current Louvre version in use.
  • Introduce the LTime nextSerial() and us() functions for obtaining incremental integer numbers and timestamps with microsecond granularity.
  • Introduce the LLauncher auxiliary class, designed for creating a daemon and safely launching applications.
  • Introduce the PaintRectParams struct to LView for utilization in LView::paintRect() calls from an LScene, aiming to reduce the memory transfer overhead associated with each call.
  • Introduce the enableAutoBlendFunc() option to LView to enable Louvre to automatically select the OpenGL blend function based on whether the target framebuffer is an output framebuffer or a custom framebuffer. This addition aims to address and resolve alpha-related issues while rendering.
  • Add pressedButtons() and isButtonPressed() methods to LPointer, providing the ability to query the state of pointer buttons at any given time.
  • The LSurface class now features the views() method, providing access to all LSurfaceViews created for the surface.

Internal Changes

  • Error and fatal messages from LLog are now directed to stderr, thanks to @brianhsu.
  • LToplevelRole configure events are now stored and dispatched at the conclusion of a main loop iteration.
  • Toplevels are now automatically configured with the pending states and size if the developer does not explicitly configure them during set or unset fullscreen or maximize requests.
  • Within the Libinput backend, the Libinput context is no longer recreated with each session switch. Previously, this recreation was necessary when forks were created while the compositor was running, as failure to do so would lead to compositor crashes.
  • Pageflip output events are no longer designated as critical sections, enabling them to run concurrently with the main thread loop. This enhancement improves the output refresh rate.

Bug Fixes

  • Addressed a bug in LPainter::clearScreen() where it failed to clear the entire screen when the current framebuffer transform differed from LFramebuffer::Transform::Normal.
  • Addressed a bug where the data source cancelled event wasn't sent to the client when start drag & drop sessions were denied.
  • Resolved a bug where LSolidColorViews were not marked as damaged when their color was changed.

Benchmark

  • Include details about the environment in which the benchmark was conducted.
  • Enhance benchmark scripts to more safely retrieve the compositors' process IDs.

-- Eduardo Hopperdietzel ehopperdietzel@gmail.com Mon, 18 Dec 2023 19:06:14 -0300

Louvre v1.0.1-1

20 Nov 04:11
Compare
Choose a tag to compare

Louvre (1.0.1-1)

Additions

  • Introduce new environment variables enabling backend selection, thanks to @2xsaiko for the idea.

Building

  • Incorporate pkg-config into meson.build to enhance dependency resolution, special thanks to @jengelh.
  • Integrate meson.build options to streamline the configuration of assets and backends.

Documentation

  • Rectify a package error in Fedora build instructions, thanks to @jwijenbergh.
  • Append notes to LCompositor::loadGraphicBackend() and LCompositor::loadInputBackend() methods.
  • Enhance benchmark documentation with operational details and transition build system from qmake to Meson.

-- Eduardo Hopperdietzel ehopperdietzel@gmail.com Mon, 20 Nov 2023 00:56:50 -0300

Louvre v1.0.0-1

13 Nov 17:54
Compare
Choose a tag to compare

Louvre (1.0.0-1)

Added

  • Multi-GPU support is now available.
  • Introduction of LObject as the base class facilitates sharing future functionality among classes.
  • Pluggable scene and views system introduced for efficient rendering and handling of input events.
  • New LAnimation class for creating time-based animations.
  • New LTimer class for time-based triggered callbacks.
  • New LResource wrapper class for wl_resource structs; each protocol resource or global now has its own LResource subclass.
  • Developers can add or modify default compositor globals by overriding the LCompositor::createGlobalsRequest() virtual method.
  • New example, louvre-views, a MacOS X lookalike compositor that uses the scene and views system.
  • LOutput framebuffers can now be used as textures.
  • LOutput now supports framebuffer transforms.
  • New LRenderBuffer class for rendering into framebuffers and using them as textures.
  • Added support for XDG Decoration, Presentation Time, and Linux DMA-Buf protocols.
  • Libseat can now be enabled or disabled using the LOUVRE_ENABLE_LIBSEAT environment variable.
  • Single, double, or triple buffering can now be configured using SRM library environment variables.

Changed

  • LCompositor::start() method is now non-blocking; developers can control the rate of compositor events processing using the pollable LCompositor::fd() and LCompositor::processLoop() methods.
  • New directory structure for protocol interfaces located in src/lib/protocols.
  • Clients can now bind multiple times to the wl_seat global, resolving the Firefox issue where it could only receive pointer events.
  • Clients can now create a wl_data_device for each wl_seat.
  • Clients can now bind multiple times to the wl_subcompositor global.
  • ping() and pong() methods moved from XDG Shell to LClient class.
  • The DRM graphic backend now uses the SRM library.

Removed

  • X11 graphic and input backends are no longer supported.
  • LOutputManager class has been eliminated, and its functionality has been integrated into the LSeat class.

-- Eduardo Hopperdietzel ehopperdietzel@gmail.com Sun, 12 Nov 2023 23:22:58 -0300

Release v0.1.0-alpha

21 Jan 05:30
Compare
Choose a tag to compare

First testing release.