From c8d4f26a9fbab3d23aac19393b0f98246b5dfc58 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Mon, 27 Nov 2023 13:30:10 +0200 Subject: [PATCH] plugins/screencast: Fix hidpi region screencasting Currently hidpi region screencasting is broken because output textures are inappropriately scaled. The orthographic projection is set up with logical pixels, but the remaining rendering code uses "1 / m_scale" scale factor, which is wrong. In order to fix hidpi and also simplify rendering logic, this change makes rendering code use logical coordinate system. It's okay to do in screencasting because we don't need to worry about snapping to the pixel grid. BUG: 476858 BUG: 476859 --- src/plugins/screencast/regionscreencastsource.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/screencast/regionscreencastsource.cpp b/src/plugins/screencast/regionscreencastsource.cpp index acfb9e9c5b..5e75225a55 100644 --- a/src/plugins/screencast/regionscreencastsource.cpp +++ b/src/plugins/screencast/regionscreencastsource.cpp @@ -60,12 +60,12 @@ void RegionScreenCastSource::updateOutput(Output *output) ShaderBinder shaderBinder(ShaderTrait::MapTexture | ShaderTrait::TransformColorspace); QMatrix4x4 projectionMatrix; projectionMatrix.ortho(m_region); - projectionMatrix.translate(outputGeometry.left() / m_scale, outputGeometry.top() / m_scale); + projectionMatrix.translate(outputGeometry.left(), outputGeometry.top()); shaderBinder.shader()->setUniform(GLShader::ModelViewProjectionMatrix, projectionMatrix); shaderBinder.shader()->setColorspaceUniformsToSRGB(colorDescription); - outputTexture->render(output->geometry().size(), 1 / m_scale); + outputTexture->render(outputGeometry.size(), 1); GLFramebuffer::popFramebuffer(); } } @@ -104,7 +104,7 @@ void RegionScreenCastSource::render(GLFramebuffer *target) projectionMatrix.ortho(QRect(QPoint(), target->size())); shader->setUniform(GLShader::ModelViewProjectionMatrix, projectionMatrix); - m_renderedTexture->render(target->size(), m_scale); + m_renderedTexture->render(target->size(), 1); ShaderManager::instance()->popShader(); GLFramebuffer::popFramebuffer();