summaryrefslogtreecommitdiff
path: root/src/managers
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2026-04-16 21:19:25 +0300
committerGitHub <noreply@github.com>2026-04-16 19:19:25 +0100
commit66ea2e2c9ed4e9257521e6706fbd21feb7e3cc5b (patch)
tree6c0c9842245917e9828874263cd11d6f556a0a48 /src/managers
parent4cce7f60a9c8772d18ffb43cb74aa227ab4b3bc4 (diff)
renderer: Various CM fixes, part 8 of refactors (#13860)
Part 8 of Ujin's refactors.
Diffstat (limited to 'src/managers')
-rw-r--r--src/managers/PointerManager.cpp6
-rw-r--r--src/managers/screenshare/ScreenshareFrame.cpp16
2 files changed, 18 insertions, 4 deletions
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<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
const bool shouldUseCpuBuffer = *PCPUBUFFER == 1 || (*PCPUBUFFER != 0 && g_pHyprRenderer->isNvidia());
- 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<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
if (SURFACE->m_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};