From b227efc8492468cc925014a6c8446a3d044b01e8 Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Sat, 7 Mar 2026 18:23:54 +0300 Subject: renderer: refactor projection setting (#13485) --- src/render/Renderer.hpp | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) (limited to 'src/render/Renderer.hpp') diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 70aaca91..441a603c 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -73,6 +73,12 @@ struct SRenderWorkspaceUntilData { PHLWINDOW w; }; +enum eRenderProjectionType : uint8_t { + RPT_MONITOR, + RPT_MIRROR, + RPT_FB, +}; + struct SRenderData { // can be private Mat3x3 targetProjection; @@ -80,28 +86,26 @@ struct SRenderData { // ---------------------- // used by public - Vector2D fbSize = {-1, -1}; - PHLMONITORREF pMonitor; + Vector2D fbSize = {-1, -1}; + PHLMONITORREF pMonitor; - Mat3x3 projection; - Mat3x3 savedProjection; - Mat3x3 monitorProjection; + eRenderProjectionType projectionType = RPT_MONITOR; - SP currentFB = nullptr; // current rendering to - SP mainFB = nullptr; // main to render to - SP outFB = nullptr; // out to render to (if offloaded, etc) + SP currentFB = nullptr; // current rendering to + SP mainFB = nullptr; // main to render to + SP outFB = nullptr; // out to render to (if offloaded, etc) - CRegion damage; - CRegion finalDamage; // damage used for funal off -> main + CRegion damage; + CRegion finalDamage; // damage used for funal off -> main - SRenderModifData renderModif; - float mouseZoomFactor = 1.f; - bool mouseZoomUseMouse = true; // true by default - bool useNearestNeighbor = false; - bool blockScreenShader = false; + SRenderModifData renderModif; + float mouseZoomFactor = 1.f; + bool mouseZoomUseMouse = true; // true by default + bool useNearestNeighbor = false; + bool blockScreenShader = false; - Vector2D primarySurfaceUVTopLeft = Vector2D(-1, -1); - Vector2D primarySurfaceUVBottomRight = Vector2D(-1, -1); + Vector2D primarySurfaceUVTopLeft = Vector2D(-1, -1); + Vector2D primarySurfaceUVBottomRight = Vector2D(-1, -1); // TODO remove and pass directly CBox clipBox = {}; // scaled coordinates @@ -246,6 +250,11 @@ class CHyprRenderer { void popMonitorTransformEnabled(); bool monitorTransformEnabled(); + void setProjectionType(const Vector2D& fbSize); + void setProjectionType(eRenderProjectionType projectionType); + Mat3x3 getBoxProjection(const CBox& box, std::optional transform = std::nullopt); + Mat3x3 projectBoxToTarget(const CBox& box, std::optional transform = std::nullopt); + SCMSettings getCMSettings(const NColorManagement::PImageDescription imageDescription, const NColorManagement::PImageDescription targetImageDescription, SP surface = nullptr, bool modifySDR = false, float sdrMinLuminance = -1.0f, int sdrMaxLuminance = -1); bool reloadShaders(const std::string& path = ""); -- cgit v1.2.3