From e536b02248f370971716b744968776f6880528be Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sun, 22 Dec 2024 17:12:09 +0100 Subject: Renderer: rewrite render scheduling (#8683) This rewrites renderer scheduling. Occlusion is now unified in a new Pass type. --- src/render/pass/RectPassElement.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/render/pass/RectPassElement.cpp (limited to 'src/render/pass/RectPassElement.cpp') diff --git a/src/render/pass/RectPassElement.cpp b/src/render/pass/RectPassElement.cpp new file mode 100644 index 00000000..73727e58 --- /dev/null +++ b/src/render/pass/RectPassElement.cpp @@ -0,0 +1,29 @@ +#include "RectPassElement.hpp" +#include "../OpenGL.hpp" + +CRectPassElement::CRectPassElement(const CRectPassElement::SRectData& data_) : data(data_) { + ; +} + +void CRectPassElement::draw(const CRegion& damage) { + if (data.color.a == 1.F || !data.blur) + g_pHyprOpenGL->renderRectWithDamage(&data.box, data.color, damage, data.round); + else + g_pHyprOpenGL->renderRectWithBlur(&data.box, data.color, data.round, data.blurA, data.xray); +} + +bool CRectPassElement::needsLiveBlur() { + return data.color.a < 1.F && !data.xray && data.blur; +} + +bool CRectPassElement::needsPrecomputeBlur() { + return data.color.a < 1.F && data.xray && data.blur; +} + +std::optional CRectPassElement::boundingBox() { + return data.box.expand(-data.round); +} + +CRegion CRectPassElement::opaqueRegion() { + return data.color.a >= 1.F ? *boundingBox() : CRegion{}; +} -- cgit v1.2.3