diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2023-11-24 10:54:21 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-24 10:54:21 +0000 |
| commit | 2ebfd0c7456eff7e9c03d379d1dfbc611dc26672 (patch) | |
| tree | 9fa0d65224283e717ef7a06bb60870a5d319e13e /src/render/Renderer.hpp | |
| parent | e40e486f61f2643578b9977b86f408799dbc75fd (diff) | |
renderer: Move to a full Hyprland GL rendering pipeline (#3920)
Also updates wlroots
Diffstat (limited to 'src/render/Renderer.hpp')
| -rw-r--r-- | src/render/Renderer.hpp | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index f28600b4..6b4f0561 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -6,6 +6,7 @@ #include "../helpers/Workspace.hpp" #include "../Window.hpp" #include "OpenGL.hpp" +#include "Renderbuffer.hpp" #include "../helpers/Timer.hpp" #include "../helpers/Region.hpp" @@ -27,6 +28,13 @@ enum eRenderPassMode RENDER_PASS_POPUP }; +enum eRenderMode +{ + RENDER_MODE_NORMAL = 0, + RENDER_MODE_FULL_FAKE = 1, + RENDER_MODE_TO_BUFFER = 2 +}; + class CToplevelExportProtocolManager; class CInputManager; struct SSessionLockSurface; @@ -58,6 +66,12 @@ class CHyprRenderer { void recheckSolitaryForMonitor(CMonitor* pMonitor); void setCursorSurface(wlr_surface* surf, int hotspotX, int hotspotY); void setCursorFromName(const std::string& name); + void renderSoftwareCursors(CMonitor* pMonitor, const CRegion& damage, std::optional<Vector2D> overridePos = {}); + void onRenderbufferDestroy(CRenderbuffer* rb); + CRenderbuffer* getCurrentRBO(); + + bool beginRender(CMonitor* pMonitor, CRegion& damage, eRenderMode mode = RENDER_MODE_NORMAL, wlr_buffer* withBuffer = nullptr); + void endRender(); bool m_bWindowRequestedCursorHide = false; bool m_bBlockSurfaceFeedback = false; @@ -89,19 +103,26 @@ class CHyprRenderer { } m_sLastCursorData; private: - void arrangeLayerArray(CMonitor*, const std::vector<std::unique_ptr<SLayerSurface>>&, bool, CBox*); - void renderWorkspaceWindowsFullscreen(CMonitor*, CWorkspace*, timespec*); // renders workspace windows (fullscreen) (tiled, floating, pinned, but no special) - void renderWorkspaceWindows(CMonitor*, CWorkspace*, timespec*); // renders workspace windows (no fullscreen) (tiled, floating, pinned, but no special) - void renderWindow(CWindow*, CMonitor*, timespec*, bool, eRenderPassMode, bool ignorePosition = false, bool ignoreAllGeometry = false); - void renderLayer(SLayerSurface*, CMonitor*, timespec*); - void renderSessionLockSurface(SSessionLockSurface*, CMonitor*, timespec*); - void renderDragIcon(CMonitor*, timespec*); - void renderIMEPopup(SIMEPopup*, CMonitor*, timespec*); - void renderWorkspace(CMonitor* pMonitor, CWorkspace* pWorkspace, timespec* now, const CBox& geometry); - void renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace* pWorkspace, timespec* now, const Vector2D& translate = {0, 0}, const float& scale = 1.f); - - bool m_bHasARenderedCursor = true; - bool m_bCursorHasSurface = false; + void arrangeLayerArray(CMonitor*, const std::vector<std::unique_ptr<SLayerSurface>>&, bool, CBox*); + void renderWorkspaceWindowsFullscreen(CMonitor*, CWorkspace*, timespec*); // renders workspace windows (fullscreen) (tiled, floating, pinned, but no special) + void renderWorkspaceWindows(CMonitor*, CWorkspace*, timespec*); // renders workspace windows (no fullscreen) (tiled, floating, pinned, but no special) + void renderWindow(CWindow*, CMonitor*, timespec*, bool, eRenderPassMode, bool ignorePosition = false, bool ignoreAllGeometry = false); + void renderLayer(SLayerSurface*, CMonitor*, timespec*); + void renderSessionLockSurface(SSessionLockSurface*, CMonitor*, timespec*); + void renderDragIcon(CMonitor*, timespec*); + void renderIMEPopup(SIMEPopup*, CMonitor*, timespec*); + void renderWorkspace(CMonitor* pMonitor, CWorkspace* pWorkspace, timespec* now, const CBox& geometry); + void renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace* pWorkspace, timespec* now, const Vector2D& translate = {0, 0}, const float& scale = 1.f); + + bool m_bHasARenderedCursor = true; + bool m_bCursorHasSurface = false; + CRenderbuffer* m_pCurrentRenderbuffer = nullptr; + wlr_buffer* m_pCurrentWlrBuffer = nullptr; + eRenderMode m_eRenderMode = RENDER_MODE_NORMAL; + int m_iLastBufferAge = 0; + + CRenderbuffer* getOrCreateRenderbuffer(wlr_buffer* buffer, uint32_t fmt); + std::vector<std::unique_ptr<CRenderbuffer>> m_vRenderbuffers; friend class CHyprOpenGLImpl; friend class CToplevelExportProtocolManager; |
