aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorVaxry <[email protected]>2024-04-23 12:29:01 +0100
committerVaxry <[email protected]>2024-04-23 12:29:01 +0100
commitcf3596a96d5c1012c363d8243baca6431ecf835b (patch)
treee1cb29a743800944aed44504474b289b5f28007e
parent4f1214c7e94687a881fece928d1346cf0951b8ee (diff)
downloadHyprland-cf3596a96d5c1012c363d8243baca6431ecf835b.tar.gz
Hyprland-cf3596a96d5c1012c363d8243baca6431ecf835b.zip
renderer: avoid rendering frame if finalDamage is empty
-rw-r--r--src/render/Renderer.cpp64
1 files changed, 33 insertions, 31 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 9a8819e1..9bb75210 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -1286,43 +1286,45 @@ void CHyprRenderer::renderMonitor(CMonitor* pMonitor) {
bool renderCursor = true;
- if (!pMonitor->solitaryClient) {
- if (pMonitor->isMirror()) {
- g_pHyprOpenGL->blend(false);
- g_pHyprOpenGL->renderMirrored();
- g_pHyprOpenGL->blend(true);
- EMIT_HOOK_EVENT("render", RENDER_POST_MIRROR);
- renderCursor = false;
- } else {
- CBox renderBox = {0, 0, (int)pMonitor->vecPixelSize.x, (int)pMonitor->vecPixelSize.y};
- renderWorkspace(pMonitor, pMonitor->activeWorkspace, &now, renderBox);
+ if (!finalDamage.empty()) {
+ if (!pMonitor->solitaryClient) {
+ if (pMonitor->isMirror()) {
+ g_pHyprOpenGL->blend(false);
+ g_pHyprOpenGL->renderMirrored();
+ g_pHyprOpenGL->blend(true);
+ EMIT_HOOK_EVENT("render", RENDER_POST_MIRROR);
+ renderCursor = false;
+ } else {
+ CBox renderBox = {0, 0, (int)pMonitor->vecPixelSize.x, (int)pMonitor->vecPixelSize.y};
+ renderWorkspace(pMonitor, pMonitor->activeWorkspace, &now, renderBox);
- renderLockscreen(pMonitor, &now, renderBox);
+ renderLockscreen(pMonitor, &now, renderBox);
- if (pMonitor == g_pCompositor->m_pLastMonitor) {
- g_pHyprNotificationOverlay->draw(pMonitor);
- g_pHyprError->draw();
- }
+ if (pMonitor == g_pCompositor->m_pLastMonitor) {
+ g_pHyprNotificationOverlay->draw(pMonitor);
+ g_pHyprError->draw();
+ }
- // for drawing the debug overlay
- if (pMonitor == g_pCompositor->m_vMonitors.front().get() && *PDEBUGOVERLAY == 1) {
- renderStartOverlay = std::chrono::high_resolution_clock::now();
- g_pDebugOverlay->draw();
- endRenderOverlay = std::chrono::high_resolution_clock::now();
- }
+ // for drawing the debug overlay
+ if (pMonitor == g_pCompositor->m_vMonitors.front().get() && *PDEBUGOVERLAY == 1) {
+ renderStartOverlay = std::chrono::high_resolution_clock::now();
+ g_pDebugOverlay->draw();
+ endRenderOverlay = std::chrono::high_resolution_clock::now();
+ }
- if (*PDAMAGEBLINK && damageBlinkCleanup == 0) {
- CBox monrect = {0, 0, pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y};
- g_pHyprOpenGL->renderRect(&monrect, CColor(1.0, 0.0, 1.0, 100.0 / 255.0), 0);
- damageBlinkCleanup = 1;
- } else if (*PDAMAGEBLINK) {
- damageBlinkCleanup++;
- if (damageBlinkCleanup > 3)
- damageBlinkCleanup = 0;
+ if (*PDAMAGEBLINK && damageBlinkCleanup == 0) {
+ CBox monrect = {0, 0, pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y};
+ g_pHyprOpenGL->renderRect(&monrect, CColor(1.0, 0.0, 1.0, 100.0 / 255.0), 0);
+ damageBlinkCleanup = 1;
+ } else if (*PDAMAGEBLINK) {
+ damageBlinkCleanup++;
+ if (damageBlinkCleanup > 3)
+ damageBlinkCleanup = 0;
+ }
}
+ } else {
+ g_pHyprRenderer->renderWindow(pMonitor->solitaryClient, pMonitor, &now, false, RENDER_PASS_MAIN /* solitary = no popups */);
}
- } else {
- g_pHyprRenderer->renderWindow(pMonitor->solitaryClient, pMonitor, &now, false, RENDER_PASS_MAIN /* solitary = no popups */);
}
renderCursor = renderCursor && shouldRenderCursor();