diff options
| author | UjinT34 <41110182+UjinT34@users.noreply.github.com> | 2026-03-07 18:23:54 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-07 15:23:54 +0000 |
| commit | b227efc8492468cc925014a6c8446a3d044b01e8 (patch) | |
| tree | bc0ec5c133a0742ee92f2d4f5bde24b5ebd33a43 /src/render/Renderer.hpp | |
| parent | 73fca55e7c9dd19222c8c0cc331ddebf4c4bfddf (diff) | |
renderer: refactor projection setting (#13485)
Diffstat (limited to 'src/render/Renderer.hpp')
| -rw-r--r-- | src/render/Renderer.hpp | 43 |
1 files changed, 26 insertions, 17 deletions
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<IFramebuffer> currentFB = nullptr; // current rendering to - SP<IFramebuffer> mainFB = nullptr; // main to render to - SP<IFramebuffer> outFB = nullptr; // out to render to (if offloaded, etc) + SP<IFramebuffer> currentFB = nullptr; // current rendering to + SP<IFramebuffer> mainFB = nullptr; // main to render to + SP<IFramebuffer> 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<eTransform> transform = std::nullopt); + Mat3x3 projectBoxToTarget(const CBox& box, std::optional<eTransform> transform = std::nullopt); + SCMSettings getCMSettings(const NColorManagement::PImageDescription imageDescription, const NColorManagement::PImageDescription targetImageDescription, SP<CWLSurfaceResource> surface = nullptr, bool modifySDR = false, float sdrMinLuminance = -1.0f, int sdrMaxLuminance = -1); bool reloadShaders(const std::string& path = ""); |
