aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorVaxry <[email protected]>2023-12-04 02:08:34 +0000
committerVaxry <[email protected]>2023-12-04 02:08:34 +0000
commit5d100bdcbbd87bac74935eae6b7d7aed25620323 (patch)
treeac9f529eac637842bcd6be165cf81775dd890666
parent45d3fbb8d8409b2def531a9315916606165875cf (diff)
downloadHyprland-5d100bdcbbd87bac74935eae6b7d7aed25620323.tar.gz
Hyprland-5d100bdcbbd87bac74935eae6b7d7aed25620323.zip
opengl: clear layer fade fbs in ~dtor
-rw-r--r--src/Compositor.cpp3
-rw-r--r--src/helpers/WLClasses.cpp5
-rw-r--r--src/helpers/WLClasses.hpp1
3 files changed, 6 insertions, 3 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 3020b96d..9419583e 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -1441,9 +1441,6 @@ void CCompositor::cleanupFadingOut(const int& monid) {
g_pHyprOpenGL->markBlurDirtyForMonitor(getMonitorFromID(monid));
if (ls->fadingOut && ls->readyToDelete && !ls->alpha.isBeingAnimated()) {
- g_pHyprOpenGL->m_mLayerFramebuffers[ls].release();
- g_pHyprOpenGL->m_mLayerFramebuffers.erase(ls);
-
for (auto& m : m_vMonitors) {
for (auto& lsl : m->m_aLayerSurfaceLayers) {
if (!lsl.empty() && std::find_if(lsl.begin(), lsl.end(), [&](std::unique_ptr<SLayerSurface>& other) { return other.get() == ls; }) != lsl.end()) {
diff --git a/src/helpers/WLClasses.cpp b/src/helpers/WLClasses.cpp
index 6923d6a5..9a326614 100644
--- a/src/helpers/WLClasses.cpp
+++ b/src/helpers/WLClasses.cpp
@@ -8,6 +8,11 @@ SLayerSurface::SLayerSurface() {
alpha.registerVar();
}
+SLayerSurface::~SLayerSurface() {
+ g_pHyprRenderer->makeEGLCurrent();
+ std::erase_if(g_pHyprOpenGL->m_mLayerFramebuffers, [&](const auto& other) { return other.first == this; });
+}
+
void SLayerSurface::applyRules() {
noAnimations = false;
forceBlur = false;
diff --git a/src/helpers/WLClasses.hpp b/src/helpers/WLClasses.hpp
index f7efbe98..d381fa0d 100644
--- a/src/helpers/WLClasses.hpp
+++ b/src/helpers/WLClasses.hpp
@@ -16,6 +16,7 @@ struct SLayerRule {
struct SLayerSurface {
SLayerSurface();
+ ~SLayerSurface();
void applyRules();