summaryrefslogtreecommitdiff
path: root/src/render/ElementRenderer.hpp
blob: ed92b06f31b3a554ec97a62e9b45c6c416928811 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#pragma once

#include "./pass/BorderPassElement.hpp"
#include "./pass/ClearPassElement.hpp"
#include "./pass/FramebufferElement.hpp"
#include "./pass/PreBlurElement.hpp"
#include "./pass/RectPassElement.hpp"
#include "./pass/RendererHintsPassElement.hpp"
#include "./pass/ShadowPassElement.hpp"
#include "./pass/SurfacePassElement.hpp"
#include "./pass/TexPassElement.hpp"
#include "./pass/TextureMatteElement.hpp"
#include "./pass/InnerGlowPassElement.hpp"
#include <hyprutils/math/Region.hpp>

namespace Render {
    class IElementRenderer {
      public:
        IElementRenderer()          = default;
        virtual ~IElementRenderer() = default;

        void drawElement(WP<IPassElement> element, const CRegion& damage);

      protected:
        virtual void draw(WP<CBorderPassElement> element, const CRegion& damage)    = 0;
        virtual void draw(WP<CClearPassElement> element, const CRegion& damage)     = 0;
        virtual void draw(WP<CFramebufferElement> element, const CRegion& damage)   = 0;
        virtual void draw(WP<CPreBlurElement> element, const CRegion& damage)       = 0;
        virtual void draw(WP<CRectPassElement> element, const CRegion& damage)      = 0;
        virtual void draw(WP<CShadowPassElement> element, const CRegion& damage)    = 0;
        virtual void draw(WP<CInnerGlowPassElement> element, const CRegion& damage) = 0;
        virtual void draw(WP<CTexPassElement> element, const CRegion& damage)       = 0;
        virtual void draw(WP<CTextureMatteElement> element, const CRegion& damage)  = 0;

      private:
        void calculateUVForSurface(PHLWINDOW, SP<CWLSurfaceResource>, PHLMONITOR pMonitor, bool main = false, const Vector2D& projSize = {}, const Vector2D& projSizeUnscaled = {},
                                   bool fixMisalignedFSV1 = false);

        void drawRect(WP<CRectPassElement> element, const CRegion& damage);
        void drawHints(WP<CRendererHintsPassElement> element, const CRegion& damage);
        void drawPreBlur(WP<CPreBlurElement> element, const CRegion& damage);
        void drawSurface(WP<CSurfacePassElement> element, const CRegion& damage);
        void preDrawSurface(WP<CSurfacePassElement> element, const CRegion& damage);
        void drawTex(WP<CTexPassElement> element, const CRegion& damage);
        void drawTexMatte(WP<CTextureMatteElement> element, const CRegion& damage);
        void drawCustom(WP<IPassElement> element, const CRegion& damage);
    };
}