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
This commit is contained in:
David Edmundson 2017-03-06 00:38:37 +00:00
parent 86b7189b8f
commit 9ce5832e11
3 changed files with 19 additions and 0 deletions

View file

@ -1037,6 +1037,7 @@ bool GLRenderTarget::s_blitSupported = false;
QStack<GLRenderTarget*> GLRenderTarget::s_renderTargets = QStack<GLRenderTarget*>(); QStack<GLRenderTarget*> GLRenderTarget::s_renderTargets = QStack<GLRenderTarget*>();
QSize GLRenderTarget::s_virtualScreenSize; QSize GLRenderTarget::s_virtualScreenSize;
QRect GLRenderTarget::s_virtualScreenGeometry; QRect GLRenderTarget::s_virtualScreenGeometry;
qreal GLRenderTarget::s_virtualScreenScale = 1.0;
void GLRenderTarget::initStatic() void GLRenderTarget::initStatic()
{ {

View file

@ -505,6 +505,21 @@ public:
return s_virtualScreenGeometry; 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: protected:
void initFBO(); void initFBO();
@ -518,6 +533,7 @@ private:
static QStack<GLRenderTarget*> s_renderTargets; static QStack<GLRenderTarget*> s_renderTargets;
static QSize s_virtualScreenSize; static QSize s_virtualScreenSize;
static QRect s_virtualScreenGeometry; static QRect s_virtualScreenGeometry;
static qreal s_virtualScreenScale;
GLTexture mTexture; GLTexture mTexture;
bool mValid; bool mValid;

View file

@ -700,6 +700,7 @@ qint64 SceneOpenGL::paint(QRegion damage, ToplevelList toplevels)
QRegion repaint = m_backend->prepareRenderingForScreen(i); QRegion repaint = m_backend->prepareRenderingForScreen(i);
GLVertexBuffer::setVirtualScreenGeometry(geo); GLVertexBuffer::setVirtualScreenGeometry(geo);
GLRenderTarget::setVirtualScreenGeometry(geo); GLRenderTarget::setVirtualScreenGeometry(geo);
GLRenderTarget::setVirtualScreenScale(screens()->scale(i));
const GLenum status = glGetGraphicsResetStatus(); const GLenum status = glGetGraphicsResetStatus();
if (status != GL_NO_ERROR) { if (status != GL_NO_ERROR) {
@ -728,6 +729,7 @@ qint64 SceneOpenGL::paint(QRegion damage, ToplevelList toplevels)
} }
GLVertexBuffer::setVirtualScreenGeometry(screens()->geometry()); GLVertexBuffer::setVirtualScreenGeometry(screens()->geometry());
GLRenderTarget::setVirtualScreenGeometry(screens()->geometry()); GLRenderTarget::setVirtualScreenGeometry(screens()->geometry());
GLRenderTarget::setVirtualScreenScale(1);
int mask = 0; int mask = 0;
updateProjectionMatrix(); updateProjectionMatrix();