From bf8ebfc631fe63f6f9f9a4417408f5df87b0313d Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Mon, 16 May 2022 20:45:27 +0200 Subject: added scaling (dt broken) damage tracking on full is broken --- src/render/Renderer.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/render/Renderer.cpp') diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 22060e83..89c37bc1 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -23,7 +23,7 @@ void renderSurface(struct wlr_surface* surface, int x, int y, void* data) { g_pHyprOpenGL->renderTextureWithBlur(TEXTURE, &windowBox, RDATA->fadeAlpha * RDATA->alpha, surface, RDATA->dontRound ? 0 : g_pConfigManager->getInt("decoration:rounding")); else g_pHyprOpenGL->renderTexture(TEXTURE, &windowBox, RDATA->fadeAlpha * RDATA->alpha, RDATA->dontRound ? 0 : g_pConfigManager->getInt("decoration:rounding")); - + wlr_surface_send_frame_done(surface, RDATA->when); wlr_presentation_surface_sampled_on_output(g_pCompositor->m_sWLRPresentation, surface, RDATA->output); @@ -488,6 +488,7 @@ void CHyprRenderer::damageWindow(CWindow* pWindow) { wlr_box fixedDamageBox = damageBox; fixedDamageBox.x -= m.vecPosition.x; fixedDamageBox.y -= m.vecPosition.y; + scaleBox(&fixedDamageBox, m.scale); wlr_output_damage_add_box(m.damage, &fixedDamageBox); } @@ -501,6 +502,7 @@ void CHyprRenderer::damageWindow(CWindow* pWindow) { wlr_box fixedDamageBox = damageBox; fixedDamageBox.x -= m.vecPosition.x; fixedDamageBox.y -= m.vecPosition.y; + scaleBox(&fixedDamageBox, m.scale); wlr_output_damage_add_box(m.damage, &fixedDamageBox); } @@ -510,8 +512,7 @@ void CHyprRenderer::damageWindow(CWindow* pWindow) { } void CHyprRenderer::damageMonitor(SMonitor* pMonitor) { - wlr_box damageBox = {0, 0, pMonitor->vecSize.x, pMonitor->vecSize.y}; - scaleBox(&damageBox, pMonitor->scale); + wlr_box damageBox = {0, 0, pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y}; wlr_output_damage_add_box(pMonitor->damage, &damageBox); if (g_pConfigManager->getInt("debug:log_damage")) @@ -521,6 +522,7 @@ void CHyprRenderer::damageMonitor(SMonitor* pMonitor) { void CHyprRenderer::damageBox(wlr_box* pBox) { for (auto& m : g_pCompositor->m_lMonitors) { wlr_box damageBox = {pBox->x - m.vecPosition.x, pBox->y - m.vecPosition.y, pBox->width, pBox->height}; + scaleBox(&damageBox, m.scale); wlr_output_damage_add_box(m.damage, &damageBox); } @@ -620,8 +622,12 @@ void CHyprRenderer::applyMonitorRule(SMonitor* pMonitor, SMonitorRule* pMonitorR } } else { wlr_output_set_custom_mode(pMonitor->output, (int)pMonitorRule->resolution.x, (int)pMonitorRule->resolution.y, (int)pMonitorRule->refreshRate * 1000); + pMonitor->vecSize = pMonitorRule->resolution; } + pMonitor->vecPixelSize = pMonitor->vecSize; + pMonitor->vecSize = (pMonitor->vecSize / pMonitor->scale).floor(); + // update renderer g_pHyprOpenGL->destroyMonitorResources(pMonitor); -- cgit v1.2.3 From 0503835ee63c707f8390dd627dd949179780d9cd Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Mon, 16 May 2022 21:30:11 +0200 Subject: fixed blur and shit --- src/render/Renderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/render/Renderer.cpp') diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 89c37bc1..aa8d0cd2 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -563,7 +563,7 @@ void CHyprRenderer::applyMonitorRule(SMonitor* pMonitor, SMonitorRule* pMonitorR Debug::log(LOG, "Applying monitor rule for %s", pMonitor->szName.c_str()); // Check if the rule isn't already applied - if (!force && DELTALESSTHAN(pMonitor->vecSize.x, pMonitorRule->resolution.x, 1) && DELTALESSTHAN(pMonitor->vecSize.y, pMonitorRule->resolution.y, 1) && DELTALESSTHAN(pMonitor->refreshRate, pMonitorRule->refreshRate, 1) && pMonitor->scale == pMonitorRule->scale) { + if (!force && DELTALESSTHAN(pMonitor->vecPixelSize.x, pMonitorRule->resolution.x, 1) && DELTALESSTHAN(pMonitor->vecPixelSize.y, pMonitorRule->resolution.y, 1) && DELTALESSTHAN(pMonitor->refreshRate, pMonitorRule->refreshRate, 1) && pMonitor->scale == pMonitorRule->scale) { Debug::log(LOG, "Not applying a new rule to %s because it's already applied!", pMonitor->szName.c_str()); return; } -- cgit v1.2.3 From c2922b6b0941fc5fd4e82877df179e14cc2d3f93 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Wed, 18 May 2022 13:08:49 +0200 Subject: fix surface effective damage scale --- src/render/Renderer.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/render/Renderer.cpp') diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index aa8d0cd2..02f7482c 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -468,6 +468,7 @@ void CHyprRenderer::damageSurface(wlr_surface* pSurface, double x, double y) { double lx = 0, ly = 0; wlr_output_layout_output_coords(g_pCompositor->m_sWLROutputLayout, m.output, &lx, &ly); pixman_region32_translate(&damageBox, lx, ly); + wlr_region_scale(&damageBox, &damageBox, m.scale); wlr_output_damage_add(m.damage, &damageBox); pixman_region32_translate(&damageBox, -lx, -ly); } -- cgit v1.2.3