Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package aquamarine for openSUSE:Factory 
checked in at 2026-01-06 17:45:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/aquamarine (Old)
 and      /work/SRC/openSUSE:Factory/.aquamarine.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "aquamarine"

Tue Jan  6 17:45:17 2026 rev:9 rq:1325495 version:0.10.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/aquamarine/aquamarine.changes    2025-09-11 
14:43:24.350111721 +0200
+++ /work/SRC/openSUSE:Factory/.aquamarine.new.1928/aquamarine.changes  
2026-01-06 17:46:50.555200595 +0100
@@ -1,0 +2,13 @@
+Mon Dec 29 22:10:17 UTC 2025 - Florian "sp1rit" <[email protected]>
+
+- Update to aquamarine-0.10.0:
+  - A new ABI-breaking release.
+  - Changes:
+    * wayland: send commit after frame
+    * backend: implement hyprutils' cli::logger
+    * rendernode: dont bother finding one on evdi
+    * Ensure disconnect called for removed connectors
+    * minor renderer changes
+    * prevent use-after-free during DRM backend shutdown
+
+-------------------------------------------------------------------

Old:
----
  aquamarine-0.9.4.tar.xz

New:
----
  aquamarine-0.10.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ aquamarine.spec ++++++
--- /var/tmp/diff_new_pack.wF3GeZ/_old  2026-01-06 17:46:51.351233342 +0100
+++ /var/tmp/diff_new_pack.wF3GeZ/_new  2026-01-06 17:46:51.351233342 +0100
@@ -16,13 +16,13 @@
 #
 
 
-%define sover   8
+%define sover   9
 %define _description %{expand:
 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.}
 Name:           aquamarine
-Version:        0.9.4
+Version:        0.10.0
 Release:        0
 Summary:        Rendering backend library
 License:        BSD-3-Clause

++++++ aquamarine-0.9.4.tar.xz -> aquamarine-0.10.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/CMakeLists.txt 
new/aquamarine-0.10.0/CMakeLists.txt
--- old/aquamarine-0.9.4/CMakeLists.txt 2025-08-23 12:55:32.000000000 +0200
+++ new/aquamarine-0.10.0/CMakeLists.txt        2025-11-23 19:33:09.000000000 
+0100
@@ -66,7 +66,7 @@
   PUBLIC "./include"
   PRIVATE "./src" "./src/include" "./protocols" "${CMAKE_BINARY_DIR}")
 set_target_properties(aquamarine PROPERTIES VERSION ${AQUAMARINE_VERSION}
-                                            SOVERSION 8)
+                                            SOVERSION 9)
 target_link_libraries(aquamarine OpenGL::EGL OpenGL::OpenGL PkgConfig::deps)
 
 check_include_file("sys/timerfd.h" HAS_TIMERFD)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/VERSION 
new/aquamarine-0.10.0/VERSION
--- old/aquamarine-0.9.4/VERSION        2025-08-23 12:55:32.000000000 +0200
+++ new/aquamarine-0.10.0/VERSION       2025-11-23 19:33:09.000000000 +0100
@@ -1 +1 @@
-0.9.4
+0.10.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/flake.lock 
new/aquamarine-0.10.0/flake.lock
--- old/aquamarine-0.9.4/flake.lock     2025-08-23 12:55:32.000000000 +0200
+++ new/aquamarine-0.10.0/flake.lock    2025-11-23 19:33:09.000000000 +0100
@@ -10,11 +10,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1755795954,
-        "narHash": "sha256-9QoDVkjLwjiZDR+y4cMWc/FVudRu5jCIG4rn15Afa9w=",
+        "lastModified": 1763913838,
+        "narHash": "sha256-Q4ZfdlEGQU2LJ/Dif0qzF88xgIkpD6/uRsGfxOpu9jc=",
         "owner": "hyprwm",
         "repo": "hyprutils",
-        "rev": "b364dcb7391709acb4492e100fe750ca722992e1",
+        "rev": "a9fe9748ae27ec40e03c8c064cf97f483097bd22",
         "type": "github"
       },
       "original": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/aquamarine-0.9.4/include/aquamarine/backend/Backend.hpp 
new/aquamarine-0.10.0/include/aquamarine/backend/Backend.hpp
--- old/aquamarine-0.9.4/include/aquamarine/backend/Backend.hpp 2025-08-23 
12:55:32.000000000 +0200
+++ new/aquamarine-0.10.0/include/aquamarine/backend/Backend.hpp        
2025-11-23 19:33:09.000000000 +0100
@@ -3,6 +3,7 @@
 #include <hyprutils/memory/SharedPtr.hpp>
 #include <hyprutils/memory/WeakPtr.hpp>
 #include <hyprutils/signal/Signal.hpp>
+#include <hyprutils/cli/Logger.hpp>
 #include <vector>
 #include <functional>
 #include <mutex>
@@ -25,6 +26,7 @@
         AQ_BACKEND_WAYLAND = 0,
         AQ_BACKEND_DRM,
         AQ_BACKEND_HEADLESS,
+        AQ_BACKEND_NULL,
     };
 
     enum eBackendRequestMode : uint32_t {
@@ -58,7 +60,8 @@
 
     struct SBackendOptions {
         explicit SBackendOptions();
-        std::function<void(eBackendLogLevel, std::string)> logFunction;
+        std::function<void(eBackendLogLevel, std::string)>                   
logFunction;
+        Hyprutils::Memory::CSharedPointer<Hyprutils::CLI::CLoggerConnection> 
logConnection;
     };
 
     struct SPollFD {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/include/aquamarine/backend/Null.hpp 
new/aquamarine-0.10.0/include/aquamarine/backend/Null.hpp
--- old/aquamarine-0.9.4/include/aquamarine/backend/Null.hpp    1970-01-01 
01:00:00.000000000 +0100
+++ new/aquamarine-0.10.0/include/aquamarine/backend/Null.hpp   2025-11-23 
19:33:09.000000000 +0100
@@ -0,0 +1,45 @@
+#pragma once
+
+#include "./Backend.hpp"
+#include "../allocator/Swapchain.hpp"
+#include "../output/Output.hpp"
+#include <hyprutils/memory/WeakPtr.hpp>
+
+namespace Aquamarine {
+    class CBackend;
+    class IAllocator;
+
+    class CNullBackend : public IBackendImplementation {
+      public:
+        virtual ~CNullBackend();
+        virtual eBackendType                                               
type();
+        virtual bool                                                       
start();
+        virtual std::vector<Hyprutils::Memory::CSharedPointer<SPollFD>>    
pollFDs();
+        virtual int                                                        
drmFD();
+        virtual bool                                                       
dispatchEvents();
+        virtual uint32_t                                                   
capabilities();
+        virtual bool                                                       
setCursor(Hyprutils::Memory::CSharedPointer<IBuffer> buffer, const 
Hyprutils::Math::Vector2D& hotspot);
+        virtual void                                                       
onReady();
+        virtual std::vector<SDRMFormat>                                    
getRenderFormats();
+        virtual std::vector<SDRMFormat>                                    
getCursorFormats();
+        virtual bool                                                       
createOutput(const std::string& name = "");
+        virtual Hyprutils::Memory::CSharedPointer<IAllocator>              
preferredAllocator();
+        virtual std::vector<Hyprutils::Memory::CSharedPointer<IAllocator>> 
getAllocators();
+        virtual Hyprutils::Memory::CWeakPointer<IBackendImplementation>    
getPrimary();
+
+        Hyprutils::Memory::CWeakPointer<CNullBackend>                      
self;
+        virtual int                                                        
drmRenderNodeFD();
+
+        void                                                               
setFormats(const std::vector<SDRMFormat>& fmts);
+
+      private:
+        CNullBackend(Hyprutils::Memory::CSharedPointer<CBackend> backend_);
+
+        Hyprutils::Memory::CWeakPointer<CBackend> backend;
+
+        std::vector<SDRMFormat>                   m_formats;
+
+        friend class CBackend;
+        friend class CHeadlessOutput;
+    };
+};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Backend.cpp 
new/aquamarine-0.10.0/src/backend/Backend.cpp
--- old/aquamarine-0.9.4/src/backend/Backend.cpp        2025-08-23 
12:55:32.000000000 +0200
+++ new/aquamarine-0.10.0/src/backend/Backend.cpp       2025-11-23 
19:33:09.000000000 +0100
@@ -2,6 +2,7 @@
 #include <aquamarine/backend/Wayland.hpp>
 #include <aquamarine/backend/Headless.hpp>
 #include <aquamarine/backend/DRM.hpp>
+#include <aquamarine/backend/Null.hpp>
 #include <aquamarine/allocator/GBM.hpp>
 #include <ranges>
 #include <sys/timerfd.h>
@@ -11,6 +12,8 @@
 #include <fcntl.h>
 #include <unistd.h>
 
+#include "Logger.hpp"
+
 using namespace Hyprutils::Memory;
 using namespace Aquamarine;
 #define SP CSharedPointer
@@ -59,6 +62,10 @@
     backend->implementationOptions = backends;
     backend->self                  = backend;
 
+    g_logger->m_loggerConnection = options.logConnection;
+    g_logger->m_logFn            = options.logFunction;
+    g_logger->updateLevels();
+
     if (backends.size() <= 0)
         return nullptr;
 
@@ -83,6 +90,10 @@
             auto ref = SP<CHeadlessBackend>(new CHeadlessBackend(backend));
             backend->implementations.emplace_back(ref);
             ref->self = ref;
+        } else if (b.backendType == AQ_BACKEND_NULL) {
+            auto ref = SP<CNullBackend>(new CNullBackend(backend));
+            backend->implementations.emplace_back(ref);
+            ref->self = ref;
         } else {
             backend->log(AQ_LOG_ERROR, std::format("Unknown backend id: {}", 
(int)b.backendType));
             continue;
@@ -133,7 +144,7 @@
 
     // erase failed impls
     std::erase_if(implementations, [this](const auto& i) {
-        bool failed = i->pollFDs().empty();
+        bool failed = i->pollFDs().empty() && i->type() != AQ_BACKEND_NULL;
         if (failed)
             log(AQ_LOG_ERROR, std::format("Implementation {} failed, 
erasing.", backendTypeToName(i->type())));
         return failed;
@@ -153,7 +164,7 @@
         }
     }
 
-    if (!primaryAllocator) {
+    if (!primaryAllocator && (implementations.empty() || 
implementations.at(0)->type() != AQ_BACKEND_NULL)) {
         log(AQ_LOG_CRITICAL, "Cannot open backend: no allocator available");
         return false;
     }
@@ -172,10 +183,7 @@
 }
 
 void Aquamarine::CBackend::log(eBackendLogLevel level, const std::string& msg) 
{
-    if (!options.logFunction)
-        return;
-
-    options.logFunction(level, msg);
+    g_logger->log(level, msg);
 }
 
 std::vector<Hyprutils::Memory::CSharedPointer<SPollFD>> 
Aquamarine::CBackend::getPollFDs() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Logger.cpp 
new/aquamarine-0.10.0/src/backend/Logger.cpp
--- old/aquamarine-0.9.4/src/backend/Logger.cpp 1970-01-01 01:00:00.000000000 
+0100
+++ new/aquamarine-0.10.0/src/backend/Logger.cpp        2025-11-23 
19:33:09.000000000 +0100
@@ -0,0 +1,35 @@
+#include "Logger.hpp"
+#include "../include/Shared.hpp"
+
+using namespace Aquamarine;
+
+static Hyprutils::CLI::eLogLevel levelToHU(eBackendLogLevel l) {
+    switch (l) {
+        case Aquamarine::AQ_LOG_DEBUG: return Hyprutils::CLI::LOG_DEBUG;
+        case Aquamarine::AQ_LOG_ERROR: return Hyprutils::CLI::LOG_ERR;
+        case Aquamarine::AQ_LOG_WARNING: return Hyprutils::CLI::LOG_WARN;
+        case Aquamarine::AQ_LOG_CRITICAL: return Hyprutils::CLI::LOG_CRIT;
+        case Aquamarine::AQ_LOG_TRACE: return Hyprutils::CLI::LOG_TRACE;
+    }
+    return Hyprutils::CLI::LOG_DEBUG;
+}
+
+CLogger::CLogger() = default;
+
+void CLogger::updateLevels() {
+    const auto IS_TRACE = Aquamarine::isTrace();
+    if (m_loggerConnection && IS_TRACE)
+        m_loggerConnection->setLogLevel(Hyprutils::CLI::LOG_TRACE);
+}
+
+void CLogger::log(eBackendLogLevel level, const std::string& str) {
+    if (m_logFn) {
+        m_logFn(level, str);
+        return;
+    }
+
+    if (m_loggerConnection) {
+        m_loggerConnection->log(levelToHU(level), str);
+        return;
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Logger.hpp 
new/aquamarine-0.10.0/src/backend/Logger.hpp
--- old/aquamarine-0.9.4/src/backend/Logger.hpp 1970-01-01 01:00:00.000000000 
+0100
+++ new/aquamarine-0.10.0/src/backend/Logger.hpp        2025-11-23 
19:33:09.000000000 +0100
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <aquamarine/backend/Backend.hpp>
+
+#include <hyprutils/cli/Logger.hpp>
+
+namespace Aquamarine {
+    class CLogger {
+      public:
+        CLogger();
+        ~CLogger() = default;
+
+        void log(eBackendLogLevel level, const std::string& str);
+        void updateLevels();
+
+        template <typename... Args>
+        //NOLINTNEXTLINE
+        void log(eBackendLogLevel level, std::format_string<Args...> fmt, 
Args&&... args) {
+            if (!m_loggerConnection && !m_logFn)
+                return;
+
+            std::string logMsg = "";
+
+            // no need for try {} catch {} because std::format_string<Args...> 
ensures that vformat never throw std::format_error
+            // because
+            // 1. any faulty format specifier that sucks will cause a 
compilation error.
+            // 2. and `std::bad_alloc` is catastrophic, (Almost any operation 
in stdlib could throw this.)
+            // 3. this is actually what std::format in stdlib does
+            logMsg += std::vformat(fmt.get(), std::make_format_args(args...));
+
+            log(level, logMsg);
+        }
+
+        std::function<void(eBackendLogLevel, std::string)>                   
m_logFn;
+        Hyprutils::Memory::CSharedPointer<Hyprutils::CLI::CLoggerConnection> 
m_loggerConnection;
+    };
+
+    inline Hyprutils::Memory::CSharedPointer<CLogger> g_logger = 
Hyprutils::Memory::makeShared<CLogger>();
+};
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Null.cpp 
new/aquamarine-0.10.0/src/backend/Null.cpp
--- old/aquamarine-0.9.4/src/backend/Null.cpp   1970-01-01 01:00:00.000000000 
+0100
+++ new/aquamarine-0.10.0/src/backend/Null.cpp  2025-11-23 19:33:09.000000000 
+0100
@@ -0,0 +1,89 @@
+#include <aquamarine/backend/Null.hpp>
+#include <fcntl.h>
+#include <ctime>
+#include <sys/timerfd.h>
+#include <cstring>
+#include "Shared.hpp"
+
+using namespace Aquamarine;
+using namespace Hyprutils::Memory;
+using namespace Hyprutils::Math;
+#define SP CSharedPointer
+
+Aquamarine::CNullBackend::~CNullBackend() {
+    ;
+}
+
+Aquamarine::CNullBackend::CNullBackend(SP<CBackend> backend_) : 
backend(backend_) {
+    ;
+}
+
+eBackendType Aquamarine::CNullBackend::type() {
+    return eBackendType::AQ_BACKEND_NULL;
+}
+
+bool Aquamarine::CNullBackend::start() {
+    return true;
+}
+
+std::vector<SP<SPollFD>> Aquamarine::CNullBackend::pollFDs() {
+    return {};
+}
+
+int Aquamarine::CNullBackend::drmFD() {
+    return -1;
+}
+
+int Aquamarine::CNullBackend::drmRenderNodeFD() {
+    return -1;
+}
+
+bool Aquamarine::CNullBackend::dispatchEvents() {
+    return true;
+}
+
+uint32_t Aquamarine::CNullBackend::capabilities() {
+    return 0;
+}
+
+bool Aquamarine::CNullBackend::setCursor(SP<IBuffer> buffer, const 
Hyprutils::Math::Vector2D& hotspot) {
+    return false;
+}
+
+void Aquamarine::CNullBackend::onReady() {
+    ;
+}
+
+std::vector<SDRMFormat> Aquamarine::CNullBackend::getRenderFormats() {
+    for (const auto& impl : backend->getImplementations()) {
+        if (impl->type() != AQ_BACKEND_DRM || 
impl->getRenderableFormats().empty())
+            continue;
+        return impl->getRenderableFormats();
+    }
+
+    return m_formats;
+}
+
+void Aquamarine::CNullBackend::setFormats(const std::vector<SDRMFormat>& fmts) 
{
+    m_formats = fmts;
+}
+
+std::vector<SDRMFormat> Aquamarine::CNullBackend::getCursorFormats() {
+    return {}; // No cursor support
+}
+
+bool Aquamarine::CNullBackend::createOutput(const std::string& name) {
+    return false;
+}
+
+SP<IAllocator> Aquamarine::CNullBackend::preferredAllocator() {
+    return backend->primaryAllocator;
+}
+
+std::vector<SP<IAllocator>> Aquamarine::CNullBackend::getAllocators() {
+    return {backend->primaryAllocator};
+}
+
+Hyprutils::Memory::CWeakPointer<IBackendImplementation> 
Aquamarine::CNullBackend::getPrimary() {
+    return {};
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Wayland.cpp 
new/aquamarine-0.10.0/src/backend/Wayland.cpp
--- old/aquamarine-0.9.4/src/backend/Wayland.cpp        2025-08-23 
12:55:32.000000000 +0200
+++ new/aquamarine-0.10.0/src/backend/Wayland.cpp       2025-11-23 
19:33:09.000000000 +0100
@@ -645,6 +645,8 @@
 
     waylandState.frameCallback = 
makeShared<CCWlCallback>(waylandState.surface->sendFrame());
     waylandState.frameCallback->setDone([this](CCWlCallback* r, uint32_t ms) { 
onFrameDone(); });
+
+    waylandState.surface->sendCommit();
 }
 
 void Aquamarine::CWaylandOutput::onFrameDone() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/drm/DRM.cpp 
new/aquamarine-0.10.0/src/backend/drm/DRM.cpp
--- old/aquamarine-0.9.4/src/backend/drm/DRM.cpp        2025-08-23 
12:55:32.000000000 +0200
+++ new/aquamarine-0.10.0/src/backend/drm/DRM.cpp       2025-11-23 
19:33:09.000000000 +0100
@@ -150,7 +150,12 @@
             continue;
         }
 
-        sessionDevice->resolveMatchingRenderNode(device);
+        auto drmVer     = drmGetVersion(sessionDevice->fd);
+        auto drmVerName = drmVer->name ? drmVer->name : "unknown";
+        if (std::string_view(drmVerName) != "evdi")
+            sessionDevice->resolveMatchingRenderNode(device);
+
+        drmFreeVersion(drmVer);
 
         udev_device_unref(device);
 
@@ -842,12 +847,12 @@
     }
 
     // cleanup hot unplugged connectors
-    std::erase_if(connectors, [resources](const auto& conn) {
+    std::erase_if(connectors, [resources](auto& conn) {
         for (int i = 0; i < resources->count_connectors; ++i) {
             if (resources->connectors[i] == conn->id)
                 return false;
         }
-
+        conn->disconnect();
         return true;
     });
 
@@ -1560,7 +1565,8 @@
 }
 
 Aquamarine::CDRMOutput::~CDRMOutput() {
-    backend->backend->removeIdleEvent(frameIdle);
+    if (backend && backend->backend)
+        backend->backend->removeIdleEvent(frameIdle);
     connector->isPageFlipPending   = false;
     connector->frameEventScheduled = false;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/drm/Renderer.cpp 
new/aquamarine-0.10.0/src/backend/drm/Renderer.cpp
--- old/aquamarine-0.9.4/src/backend/drm/Renderer.cpp   2025-08-23 
12:55:32.000000000 +0200
+++ new/aquamarine-0.10.0/src/backend/drm/Renderer.cpp  2025-11-23 
19:33:09.000000000 +0100
@@ -307,7 +307,7 @@
     }
 
     // if the driver doesn't mark linear as external, add it. It's allowed 
unless the driver says otherwise. (e.g. nvidia)
-    if (!linearIsExternal && std::ranges::find(mods, DRM_FORMAT_MOD_LINEAR) == 
mods.end() && mods.empty())
+    if (!linearIsExternal && std::ranges::find(mods, DRM_FORMAT_MOD_LINEAR) == 
mods.end())
         result.emplace_back(DRM_FORMAT_MOD_LINEAR, true);
 
     return result;
@@ -656,14 +656,15 @@
 }
 
 EGLImageKHR CDRMRenderer::createEGLImage(const SDMABUFAttrs& attrs) {
-    std::vector<uint32_t> attribs;
+    std::array<EGLint, 50> attribs;
+    size_t                 idx = 0;
 
-    attribs.push_back(EGL_WIDTH);
-    attribs.push_back(attrs.size.x);
-    attribs.push_back(EGL_HEIGHT);
-    attribs.push_back(attrs.size.y);
-    attribs.push_back(EGL_LINUX_DRM_FOURCC_EXT);
-    attribs.push_back(attrs.format);
+    attribs[idx++] = EGL_WIDTH;
+    attribs[idx++] = attrs.size.x;
+    attribs[idx++] = EGL_HEIGHT;
+    attribs[idx++] = attrs.size.y;
+    attribs[idx++] = EGL_LINUX_DRM_FOURCC_EXT;
+    attribs[idx++] = attrs.format;
 
     TRACE(backend->log(AQ_LOG_TRACE, std::format("EGL: createEGLImage: size {} 
with format {} and modifier 0x{:x}", attrs.size, fourccToName(attrs.format), 
attrs.modifier)));
 
@@ -695,26 +696,27 @@
                        .modhi  = EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT}};
 
     for (int i = 0; i < attrs.planes; i++) {
-        attribs.push_back(attrNames[i].fd);
-        attribs.push_back(attrs.fds[i]);
-        attribs.push_back(attrNames[i].offset);
-        attribs.push_back(attrs.offsets[i]);
-        attribs.push_back(attrNames[i].pitch);
-        attribs.push_back(attrs.strides[i]);
+        attribs[idx++] = attrNames[i].fd;
+        attribs[idx++] = attrs.fds[i];
+        attribs[idx++] = attrNames[i].offset;
+        attribs[idx++] = attrs.offsets[i];
+        attribs[idx++] = attrNames[i].pitch;
+        attribs[idx++] = attrs.strides[i];
         if (hasModifiers && attrs.modifier != DRM_FORMAT_MOD_INVALID) {
-            attribs.push_back(attrNames[i].modlo);
-            attribs.push_back(attrs.modifier & 0xFFFFFFFF);
-            attribs.push_back(attrNames[i].modhi);
-            attribs.push_back(attrs.modifier >> 32);
+            attribs[idx++] = attrNames[i].modlo;
+            attribs[idx++] = attrs.modifier & 0xFFFFFFFF;
+            attribs[idx++] = attrNames[i].modhi;
+            attribs[idx++] = attrs.modifier >> 32;
         }
     }
 
-    attribs.push_back(EGL_IMAGE_PRESERVED_KHR);
-    attribs.push_back(EGL_TRUE);
+    attribs[idx++] = EGL_IMAGE_PRESERVED_KHR;
+    attribs[idx++] = EGL_TRUE;
 
-    attribs.push_back(EGL_NONE);
+    attribs[idx++] = EGL_NONE;
+    RASSERT(idx <= attribs.size(), "EGL: EGLCreateImageKHR: attribs array out 
of bounds.");
 
-    EGLImageKHR image = proc.eglCreateImageKHR(egl.display, EGL_NO_CONTEXT, 
EGL_LINUX_DMA_BUF_EXT, nullptr, (int*)attribs.data());
+    EGLImageKHR image = proc.eglCreateImageKHR(egl.display, EGL_NO_CONTEXT, 
EGL_LINUX_DMA_BUF_EXT, nullptr, attribs.data());
     if (image == EGL_NO_IMAGE_KHR) {
         backend->log(AQ_LOG_ERROR, std::format("EGL: EGLCreateImageKHR failed: 
{}", eglGetError()));
         return EGL_NO_IMAGE_KHR;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/drm/impl/Atomic.cpp 
new/aquamarine-0.10.0/src/backend/drm/impl/Atomic.cpp
--- old/aquamarine-0.9.4/src/backend/drm/impl/Atomic.cpp        2025-08-23 
12:55:32.000000000 +0200
+++ new/aquamarine-0.10.0/src/backend/drm/impl/Atomic.cpp       2025-11-23 
19:33:09.000000000 +0100
@@ -196,7 +196,6 @@
     }
 }
 
-
 void 
Aquamarine::CDRMAtomicRequest::addConnectorModeset(Hyprutils::Memory::CSharedPointer<SDRMConnector>
 connector, SDRMConnectorCommitData& data) {
     if (!data.modeset)
         return;

++++++ aquamarine.obsinfo ++++++
--- /var/tmp/diff_new_pack.wF3GeZ/_old  2026-01-06 17:46:51.551241571 +0100
+++ /var/tmp/diff_new_pack.wF3GeZ/_new  2026-01-06 17:46:51.563242064 +0100
@@ -1,5 +1,5 @@
 name: aquamarine
-version: 0.9.4
-mtime: 1755946532
-commit: 81584dae2df6ac79f6b6dae0ecb7705e95129ada
+version: 0.10.0
+mtime: 1763922789
+commit: a20a0e67a33b6848378a91b871b89588d3a12573
 

Reply via email to