From 9293df2681ff9466a3d7f517ac3b88e153445429 Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Fri, 21 Jun 2024 01:17:36 +0200 Subject: [PATCH] plugins/zoom: do colorspace conversions between the screen textures Otherwise colors and especially brightness levels can be quite wrong when the textures are used on a different screen BUG: 488839 --- src/plugins/zoom/zoom.cpp | 4 +++- src/plugins/zoom/zoom.h | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/zoom/zoom.cpp b/src/plugins/zoom/zoom.cpp index c4f6fb29c3..aafedb5dca 100644 --- a/src/plugins/zoom/zoom.cpp +++ b/src/plugins/zoom/zoom.cpp @@ -277,6 +277,7 @@ ZoomEffect::OffscreenData *ZoomEffect::ensureOffscreenData(const RenderTarget &r OffscreenData &data = m_offscreenData[effects->waylandDisplay() ? screen : nullptr]; data.viewport = rect; + data.color = renderTarget.colorDescription(); const GLenum textureFormat = renderTarget.colorDescription() == ColorDescription::sRGB ? GL_RGBA8 : GL_RGBA16F; if (!data.texture || data.texture->size() != nativeSize || data.texture->internalFormat() != textureFormat) { @@ -390,7 +391,7 @@ void ZoomEffect::paintScreen(const RenderTarget &renderTarget, const RenderViewp glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); - auto shader = ShaderManager::instance()->pushShader(ShaderTrait::MapTexture); + auto shader = ShaderManager::instance()->pushShader(ShaderTrait::MapTexture | ShaderTrait::TransformColorspace); for (auto &[screen, offscreen] : m_offscreenData) { QMatrix4x4 matrix; matrix.translate(xTranslation * scale, yTranslation * scale); @@ -398,6 +399,7 @@ void ZoomEffect::paintScreen(const RenderTarget &renderTarget, const RenderViewp matrix.translate(offscreen.viewport.x() * scale, offscreen.viewport.y() * scale); shader->setUniform(GLShader::Mat4Uniform::ModelViewProjectionMatrix, viewport.projectionMatrix() * matrix); + shader->setColorspaceUniforms(offscreen.color, renderTarget.colorDescription()); offscreen.texture->render(offscreen.viewport.size() * scale); } diff --git a/src/plugins/zoom/zoom.h b/src/plugins/zoom/zoom.h index 37be3bc9bb..2a44395d74 100644 --- a/src/plugins/zoom/zoom.h +++ b/src/plugins/zoom/zoom.h @@ -9,9 +9,9 @@ */ #pragma once - #include "config-kwin.h" +#include "core/colorspace.h" #include "effect/effect.h" #include #include @@ -95,6 +95,7 @@ private: std::unique_ptr texture; std::unique_ptr framebuffer; QRect viewport; + ColorDescription color = ColorDescription::sRGB; }; GLTexture *ensureCursorTexture();