From 66ea2e2c9ed4e9257521e6706fbd21feb7e3cc5b Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Thu, 16 Apr 2026 21:19:25 +0300 Subject: renderer: Various CM fixes, part 8 of refactors (#13860) Part 8 of Ujin's refactors. --- src/managers/PointerManager.cpp | 6 +++++- src/managers/screenshare/ScreenshareFrame.cpp | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) (limited to 'src/managers') diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 8d3c83f0..04deca9a 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -419,8 +419,10 @@ SP CPointerManager::renderHWCursorBuffer(SPisNvidia()); - if (maxSize == Vector2D{}) + if (maxSize == Vector2D{}) { + Log::logger->log(Log::TRACE, "hardware cursor has zero max size {}, current {}", maxSize, m_currentCursorImage.size); return nullptr; + } if (maxSize != Vector2D{-1, -1}) { if (cursorSize.x > maxSize.x || cursorSize.y > maxSize.y) { @@ -493,6 +495,8 @@ SP CPointerManager::renderHWCursorBuffer(SPm_current.texture) { Log::logger->log(Log::TRACE, "Cursor CPU surface: format {}, expecting AR24", NFormatUtils::drmFormatName(SURFACE->m_current.texture->m_drmFormat)); + if (!SURFACE->m_current.texture->m_drmFormat) + SURFACE->m_current.texture->m_drmFormat = DRM_FORMAT_ARGB8888; // FIXME assumes DRM_FORMAT_ARGB8888 if (SURFACE->m_current.texture->m_drmFormat == DRM_FORMAT_ABGR8888) { Log::logger->log(Log::TRACE, "Cursor CPU surface format AB24, will flip. WARNING: this will break on big endian!"); flipRB = true; diff --git a/src/managers/screenshare/ScreenshareFrame.cpp b/src/managers/screenshare/ScreenshareFrame.cpp index 47c61fe6..de71fcaa 100644 --- a/src/managers/screenshare/ScreenshareFrame.cpp +++ b/src/managers/screenshare/ScreenshareFrame.cpp @@ -171,6 +171,16 @@ void CScreenshareFrame::renderMonitor() { return; } + if (!TEXTURE->m_imageDescription) + Log::logger->log(Log::ERR, "CM: FIXME no source image description for screenshare"); + + if (!g_pHyprRenderer->m_renderData.currentFB->imageDescription()) + Log::logger->log(Log::ERR, "CM: FIXME no target image description for screenshare"); + + if (TEXTURE->m_imageDescription && g_pHyprRenderer->m_renderData.currentFB->imageDescription()) + Log::logger->log(Log::TRACE, "CM: screenshot renderMonitor {} -> {}", TEXTURE->m_imageDescription->value(), + g_pHyprRenderer->m_renderData.currentFB->imageDescription()->value()); + const bool IS_CM_AWARE = PROTO::colorManagement && PROTO::colorManagement->isClientCMAware(m_session->m_client); g_pHyprRenderer->m_renderData.transformDamage = false; g_pHyprRenderer->m_renderData.noSimplify = true; @@ -373,7 +383,7 @@ bool CScreenshareFrame::copyDmabuf() { LOGM(Log::ERR, "Can't copy: failed to begin rendering to dma frame"); return false; } - g_pHyprRenderer->m_renderData.currentFB->setImageDescription(NColorManagement::DEFAULT_IMAGE_DESCRIPTION); + g_pHyprRenderer->m_renderData.currentFB->setImageDescription(NColorManagement::DEFAULT_SRGB_IMAGE_DESCRIPTION); render(); @@ -407,7 +417,7 @@ bool CScreenshareFrame::copyShm() { auto outFB = g_pHyprRenderer->createFB(); outFB->alloc(m_bufferSize.x, m_bufferSize.y, shm.format); - outFB->setImageDescription(NColorManagement::DEFAULT_IMAGE_DESCRIPTION); + outFB->setImageDescription(NColorManagement::DEFAULT_SRGB_IMAGE_DESCRIPTION); if (!g_pHyprRenderer->beginFullFakeRender(PMONITOR, m_damage, outFB)) { LOGM(Log::ERR, "Can't copy: failed to begin rendering"); @@ -440,7 +450,7 @@ void CScreenshareFrame::storeTempFB() { if (!m_session->m_tempFB) m_session->m_tempFB = g_pHyprRenderer->createFB(); m_session->m_tempFB->alloc(m_bufferSize.x, m_bufferSize.y); - m_session->m_tempFB->setImageDescription(NColorManagement::DEFAULT_IMAGE_DESCRIPTION); + m_session->m_tempFB->setImageDescription(NColorManagement::DEFAULT_SRGB_IMAGE_DESCRIPTION); CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; -- cgit v1.2.3