Find a file
NZKea 813c1e8981
FormatUtils: null-check drmGetFormatModifierName result (#287)
drmGetFormatModifierName() can return NULL for DRM modifiers that
libdrm has no human-readable name for (notably Apple Silicon /
Asahi GPU vendor-specific modifiers). drmModifierToName() then
constructs a std::string from the NULL pointer and aborts with
`std::logic_error: basic_string: construction from null is not
valid`, crashing any client that triggers a swapchain reconfigure
against an Asahi GBM buffer.

Mirror the existing NULL handling in fourccToName() (which already
falls back to "unknown") to avoid the abort.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 22:52:45 +01:00
.github/workflows CI: use org-wide actions 2026-04-17 14:35:26 +03:00
data drm: implement edid parsing 2024-07-02 13:15:56 +02:00
docs drm: add AQ_NO_MODIFIERS to try to mitigate hardware limitations (#77) 2024-09-06 01:00:39 +01:00
include/aquamarine drm: CRTC starvation recovery + clear stale page-flip state after suspend (#254) 2026-04-27 21:02:14 +01:00
nix nix: separate overlay with deps 2026-03-02 16:11:18 +02:00
protocols Wayland: Initial progress 2024-06-18 18:45:05 +02:00
src FormatUtils: null-check drmGetFormatModifierName result (#287) 2026-04-29 22:52:45 +01:00
tests drm: Avoid unnecessary modeset (fixed) (#184) 2025-07-07 16:19:52 +02:00
.clang-format core: Initial stuff 2024-06-18 11:38:26 +02:00
.clang-tidy clang-tidy: fix some errors (#166) 2025-04-22 23:23:23 +02:00
.gitignore Wayland: Initial progress 2024-06-18 18:45:05 +02:00
aquamarine.pc.in core: Initial stuff 2024-06-18 11:38:26 +02:00
CMakeLists.txt version: bump to 0.11.0 2026-04-26 00:25:11 +01:00
flake.lock flake.lock: update 2026-03-02 16:11:18 +02:00
flake.nix nix: separate overlay with deps 2026-03-02 16:11:18 +02:00
LICENSE Initial commit 2024-06-18 10:56:51 +02:00
README.md README: drop todo list 2026-03-05 13:15:49 +00:00
VERSION version: bump to 0.11.0 2026-04-26 00:25:11 +01:00

Aquamarine

Aquamarine is a very light linux rendering backend library. It provides basic abstractions for an application to render on a Wayland session (in a window) or a native DRM session.

It is agnostic of the rendering API (Vulkan/OpenGL) and designed to be lightweight, performant, and minimal.

Aquamarine provides no bindings for other languages. It is C++-only.

Stability

Aquamarine depends on the ABI stability of the stdlib implementation of your compiler. Sover bumps will be done only for aquamarine ABI breaks, not stdlib.

Building

cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`