From 9ce5832e11bcecd125c2ef2cc200a586bdacb12e Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Mon, 6 Mar 2017 00:38:37 +0000 Subject: [PATCH] Store GLRenderTarget::scale Summary: GLRenderTarget already stores the translation from global compositor space to the render target co-ordinates, we also need a scale factor for the exact same reasons. Test Plan: Used in various effects after this patch and it works there. Reviewers: #plasma Subscribers: plasma-devel, kwin, #kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D4948 --- libkwineffects/kwinglutils.cpp | 1 + libkwineffects/kwinglutils.h | 16 ++++++++++++++++ scene_opengl.cpp | 2 ++ 3 files changed, 19 insertions(+) diff --git a/libkwineffects/kwinglutils.cpp b/libkwineffects/kwinglutils.cpp index 06a49de3e2..36f219cbfb 100644 --- a/libkwineffects/kwinglutils.cpp +++ b/libkwineffects/kwinglutils.cpp @@ -1037,6 +1037,7 @@ bool GLRenderTarget::s_blitSupported = false; QStack GLRenderTarget::s_renderTargets = QStack(); QSize GLRenderTarget::s_virtualScreenSize; QRect GLRenderTarget::s_virtualScreenGeometry; +qreal GLRenderTarget::s_virtualScreenScale = 1.0; void GLRenderTarget::initStatic() { diff --git a/libkwineffects/kwinglutils.h b/libkwineffects/kwinglutils.h index 95bf5c57ee..9d1935544e 100644 --- a/libkwineffects/kwinglutils.h +++ b/libkwineffects/kwinglutils.h @@ -505,6 +505,21 @@ public: return s_virtualScreenGeometry; } + /** + * The scale of the OpenGL window currently being rendered to + * + * @returns the ratio between the virtual geometry space the rendering + * system uses and the target + * @since 5.10 + */ + static void setVirtualScreenScale(qreal scale) { + s_virtualScreenScale = scale; + } + + static qreal virtualScreenScale() { + return s_virtualScreenScale; + } + protected: void initFBO(); @@ -518,6 +533,7 @@ private: static QStack s_renderTargets; static QSize s_virtualScreenSize; static QRect s_virtualScreenGeometry; + static qreal s_virtualScreenScale; GLTexture mTexture; bool mValid; diff --git a/scene_opengl.cpp b/scene_opengl.cpp index 8ebebae451..22debbd9f9 100644 --- a/scene_opengl.cpp +++ b/scene_opengl.cpp @@ -700,6 +700,7 @@ qint64 SceneOpenGL::paint(QRegion damage, ToplevelList toplevels) QRegion repaint = m_backend->prepareRenderingForScreen(i); GLVertexBuffer::setVirtualScreenGeometry(geo); GLRenderTarget::setVirtualScreenGeometry(geo); + GLRenderTarget::setVirtualScreenScale(screens()->scale(i)); const GLenum status = glGetGraphicsResetStatus(); if (status != GL_NO_ERROR) { @@ -728,6 +729,7 @@ qint64 SceneOpenGL::paint(QRegion damage, ToplevelList toplevels) } GLVertexBuffer::setVirtualScreenGeometry(screens()->geometry()); GLRenderTarget::setVirtualScreenGeometry(screens()->geometry()); + GLRenderTarget::setVirtualScreenScale(1); int mask = 0; updateProjectionMatrix();