From 5bbeaeebd303be5826fc305cdac12551cbbcae91 Mon Sep 17 00:00:00 2001 From: nyx Date: Mon, 21 Apr 2025 14:47:47 -0400 Subject: [PATCH] LayerSurface: always render in callback (#117) * LayerSurface: always render in callback --- src/helpers/LayerSurface.cpp | 10 +++------- src/helpers/LayerSurface.hpp | 1 - src/hyprpicker.cpp | 4 +--- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/helpers/LayerSurface.cpp b/src/helpers/LayerSurface.cpp index 5ae9b6f..3243cc8 100644 --- a/src/helpers/LayerSurface.cpp +++ b/src/helpers/LayerSurface.cpp @@ -66,10 +66,7 @@ CLayerSurface::~CLayerSurface() { static void onCallbackDone(CLayerSurface* surf, uint32_t when) { surf->frameCallback.reset(); - if (surf->dirty || !surf->rendered || surf->forceRerender) - g_pHyprpicker->renderSurface(surf); - - surf->forceRerender = false; + g_pHyprpicker->renderSurface(surf); } void CLayerSurface::sendFrame() { @@ -79,6 +76,8 @@ void CLayerSurface::sendFrame() { frameCallback = makeShared(pSurface->sendFrame()); frameCallback->setDone([this](CCWlCallback* r, uint32_t when) { onCallbackDone(this, when); }); + pSurface->sendDamageBuffer(0, 0, 0xFFFF, 0xFFFF); + pSurface->sendAttach(PBUFFER->buffer.get(), 0, 0); if (!g_pHyprpicker->m_bNoFractional) { pSurface->sendSetBufferScale(1); @@ -86,10 +85,7 @@ void CLayerSurface::sendFrame() { } else pSurface->sendSetBufferScale(m_pMonitor->scale); - pSurface->sendDamageBuffer(0, 0, 0xFFFF, 0xFFFF); pSurface->sendCommit(); - - dirty = false; } void CLayerSurface::markDirty() { diff --git a/src/helpers/LayerSurface.hpp b/src/helpers/LayerSurface.hpp index c3e50c6..46bc87c 100644 --- a/src/helpers/LayerSurface.hpp +++ b/src/helpers/LayerSurface.hpp @@ -38,5 +38,4 @@ class CLayerSurface { bool rendered = false; SP frameCallback = nullptr; - bool forceRerender = false; }; \ No newline at end of file diff --git a/src/hyprpicker.cpp b/src/hyprpicker.cpp index dfbd394..9618f31 100644 --- a/src/hyprpicker.cpp +++ b/src/hyprpicker.cpp @@ -169,10 +169,8 @@ void CHyprpicker::recheckACK() { void CHyprpicker::markDirty() { for (auto& ls : m_vLayerSurfaces) { - if (ls->frameCallback) { - ls->forceRerender = true; + if (ls->frameCallback) continue; - } ls->markDirty(); }