From c6b9b292dda55fe3b43f0ef27213f110b0bd7169 Mon Sep 17 00:00:00 2001
From: Vaxry <vaxry@vaxry.net>
Date: Sat, 6 Jul 2024 11:28:24 +0200
Subject: [PATCH] fix mirrors, thanks virtcode

---
 src/render/OpenGL.cpp   | 12 ++++++------
 src/render/Renderer.cpp |  2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp
index 9658adb5b..edd3cc921 100644
--- a/src/render/OpenGL.cpp
+++ b/src/render/OpenGL.cpp
@@ -2438,11 +2438,11 @@ void CHyprOpenGLImpl::renderMirrored() {
         return;
 
     // replace monitor projection to undo the mirrored monitor's projection
-    matrixIdentity(monitor->projMatrix.data());
-    matrixTranslate(monitor->projMatrix.data(), monitor->vecPixelSize.x / 2.0, monitor->vecPixelSize.y / 2.0);
-    matrixTransform(monitor->projMatrix.data(), wlTransformToHyprutils(monitor->transform));
-    matrixTransform(monitor->projMatrix.data(), wlTransformToHyprutils(invertTransform(mirrored->transform)));
-    matrixTranslate(monitor->projMatrix.data(), -monitor->vecTransformedSize.x / 2.0, -monitor->vecTransformedSize.y / 2.0);
+    matrixIdentity(m_RenderData.monitorProjection.data());
+    matrixTranslate(m_RenderData.monitorProjection.data(), monitor->vecPixelSize.x / 2.0, monitor->vecPixelSize.y / 2.0);
+    matrixTransform(m_RenderData.monitorProjection.data(), wlTransformToHyprutils(monitor->transform));
+    matrixTransform(m_RenderData.monitorProjection.data(), wlTransformToHyprutils(invertTransform(mirrored->transform)));
+    matrixTranslate(m_RenderData.monitorProjection.data(), -monitor->vecTransformedSize.x / 2.0, -monitor->vecTransformedSize.y / 2.0);
 
     // clear stuff outside of mirrored area (e.g. when changing to mirrored)
     clear(CColor(0, 0, 0, 0));
@@ -2450,7 +2450,7 @@ void CHyprOpenGLImpl::renderMirrored() {
     renderTexture(PFB->m_cTex, &monbox, 1.f, 0, false, false);
 
     // reset matrix for further drawing
-    monitor->updateMatrix();
+    m_RenderData.monitorProjection = monitor->projMatrix;
 }
 
 void CHyprOpenGLImpl::renderSplash(cairo_t* const CAIRO, cairo_surface_t* const CAIROSURFACE, double offsetY, const Vector2D& size) {
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index f753a6261..ac6fd8c1e 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -1400,7 +1400,7 @@ void CHyprRenderer::renderMonitor(CMonitor* pMonitor) {
     TRACY_GPU_COLLECT;
 
     if (!pMonitor->mirrors.empty()) {
-        CRegion    frameDamage{};
+        CRegion    frameDamage{finalDamage};
 
         const auto TRANSFORM = invertTransform(pMonitor->transform);
         frameDamage.transform(wlTransformToHyprutils(TRANSFORM), pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y);