Hyprland/src/render/Renderer.hpp

77 lines
2.8 KiB
C++
Raw Normal View History

2022-03-17 20:22:29 +01:00
#pragma once
#include "../defines.hpp"
2022-03-19 14:37:40 +01:00
#include <list>
#include "../helpers/Monitor.hpp"
2022-03-21 19:18:33 +01:00
#include "../helpers/Workspace.hpp"
2022-03-19 16:13:19 +01:00
#include "../Window.hpp"
2022-04-05 20:49:15 +02:00
#include "OpenGL.hpp"
2022-03-17 20:22:29 +01:00
2022-04-19 19:01:23 +02:00
struct SMonitorRule;
2022-04-14 16:43:29 +02:00
// TODO: add fuller damage tracking for updating only parts of a window
2023-01-29 14:58:47 +01:00
enum DAMAGETRACKINGMODES
{
2022-04-14 16:43:29 +02:00
DAMAGE_TRACKING_INVALID = -1,
DAMAGE_TRACKING_NONE = 0,
2022-04-14 16:43:29 +02:00
DAMAGE_TRACKING_MONITOR,
DAMAGE_TRACKING_FULL
};
2023-01-29 14:58:47 +01:00
enum eRenderPassMode
{
RENDER_PASS_ALL = 0,
RENDER_PASS_MAIN,
RENDER_PASS_POPUP
};
class CToplevelExportProtocolManager;
2023-01-26 11:39:06 +01:00
class CInputManager;
2022-03-17 20:22:29 +01:00
class CHyprRenderer {
public:
2022-03-17 20:22:29 +01:00
void renderAllClientsForMonitor(const int&, timespec*);
2022-03-19 14:07:18 +01:00
void outputMgrApplyTest(wlr_output_configuration_v1*, bool);
2022-03-19 14:37:40 +01:00
void arrangeLayersForMonitor(const int&);
2022-04-14 16:43:29 +02:00
void damageSurface(wlr_surface*, double, double);
void damageWindow(CWindow*);
void damageBox(wlr_box*);
void damageBox(const int& x, const int& y, const int& w, const int& h);
void damageRegion(pixman_region32_t*);
2022-07-27 12:32:00 +02:00
void damageMonitor(CMonitor*);
2022-09-13 15:25:42 +02:00
void damageMirrorsWith(CMonitor*, pixman_region32_t*);
2022-07-27 12:32:00 +02:00
bool applyMonitorRule(CMonitor*, SMonitorRule*, bool force = false);
bool shouldRenderWindow(CWindow*, CMonitor*);
bool shouldRenderWindow(CWindow*);
2022-06-24 23:27:02 +02:00
void ensureCursorRenderingMode();
2022-06-26 13:43:32 +02:00
bool shouldRenderCursor();
2023-01-29 14:58:47 +01:00
void calculateUVForSurface(CWindow*, wlr_surface*, bool main = false);
2022-06-26 13:43:32 +02:00
bool m_bWindowRequestedCursorHide = false;
bool m_bBlockSurfaceFeedback = false;
2022-12-28 15:39:17 +01:00
bool m_bRenderingSnapshot = false;
CWindow* m_pLastScanout = nullptr;
CMonitor* m_pMostHzMonitor = nullptr;
2022-04-14 16:43:29 +02:00
DAMAGETRACKINGMODES damageTrackingModeFromStr(const std::string&);
2022-03-17 20:22:29 +01:00
2022-11-05 13:50:47 +01:00
bool attemptDirectScanout(CMonitor*);
void setWindowScanoutMode(CWindow*);
private:
void arrangeLayerArray(CMonitor*, const std::vector<std::unique_ptr<SLayerSurface>>&, bool, wlr_box*);
void renderWorkspaceWithFullscreenWindow(CMonitor*, CWorkspace*, timespec*);
void renderWindow(CWindow*, CMonitor*, timespec*, bool, eRenderPassMode, bool ignorePosition = false, bool ignoreAllGeometry = false);
void renderLayer(SLayerSurface*, CMonitor*, timespec*);
void renderDragIcon(CMonitor*, timespec*);
void renderIMEPopup(SIMEPopup*, CMonitor*, timespec*);
2022-06-24 23:27:02 +02:00
bool m_bHasARenderedCursor = true;
2022-04-05 20:49:15 +02:00
friend class CHyprOpenGLImpl;
friend class CToplevelExportProtocolManager;
2023-01-26 11:39:06 +01:00
friend class CInputManager;
2022-03-17 20:22:29 +01:00
};
inline std::unique_ptr<CHyprRenderer> g_pHyprRenderer;