summaryrefslogtreecommitdiff
path: root/src/render/Renderer.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2023-11-24 10:54:21 +0000
committerGitHub <noreply@github.com>2023-11-24 10:54:21 +0000
commit2ebfd0c7456eff7e9c03d379d1dfbc611dc26672 (patch)
tree9fa0d65224283e717ef7a06bb60870a5d319e13e /src/render/Renderer.hpp
parente40e486f61f2643578b9977b86f408799dbc75fd (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.hpp47
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;