diff options
author | Vaxry <[email protected]> | 2024-11-03 15:16:08 +0000 |
---|---|---|
committer | Vaxry <[email protected]> | 2024-11-03 15:16:13 +0000 |
commit | 180c26ada6233c3c59c331cb14a64aac1eeb2941 (patch) | |
tree | 2fe8800e6aad56482c5f015a5996a1b2a0937b2b | |
parent | 5833abbbd11dca718379863cb2fb5c2423f5d7e7 (diff) | |
download | Hyprland-180c26ada6233c3c59c331cb14a64aac1eeb2941.tar.gz Hyprland-180c26ada6233c3c59c331cb14a64aac1eeb2941.zip |
renderer: safeguard against non-sampleable currentFB in blurMainFb
fixes #8325
-rw-r--r-- | src/render/Framebuffer.cpp | 6 | ||||
-rw-r--r-- | src/render/OpenGL.cpp | 5 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/render/Framebuffer.cpp b/src/render/Framebuffer.cpp index 814a3339..bf75d414 100644 --- a/src/render/Framebuffer.cpp +++ b/src/render/Framebuffer.cpp @@ -97,12 +97,18 @@ void CFramebuffer::bind() { } void CFramebuffer::release() { + if (!m_iFbAllocated && !m_cTex) + return; + + Debug::log(TRACE, "fb {} released", m_iFb); + if (m_iFbAllocated) glDeleteFramebuffers(1, &m_iFb); m_cTex.reset(); m_iFbAllocated = false; m_vSize = Vector2D(); + m_iFb = 0; } CFramebuffer::~CFramebuffer() { diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 415bb920..45837509 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1656,6 +1656,11 @@ void CHyprOpenGLImpl::renderTextureMatte(SP<CTexture> tex, CBox* pBox, CFramebuf // Dual (or more) kawase blur CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* originalDamage) { + if (!m_RenderData.currentFB->getTexture()) { + Debug::log(ERR, "BUG THIS: null fb texture while attempting to blur main fb?! (introspection off?!)"); + return &m_RenderData.pCurrentMonData->mirrorFB; // return something to sample from at least + } + TRACY_GPU_ZONE("RenderBlurMainFramebufferWithDamage"); const auto BLENDBEFORE = m_bBlend; |