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:
parent
86b7189b8f
commit
9ce5832e11
3 changed files with 19 additions and 0 deletions
|
@ -1037,6 +1037,7 @@ bool GLRenderTarget::s_blitSupported = false;
|
|||
QStack<GLRenderTarget*> GLRenderTarget::s_renderTargets = QStack<GLRenderTarget*>();
|
||||
QSize GLRenderTarget::s_virtualScreenSize;
|
||||
QRect GLRenderTarget::s_virtualScreenGeometry;
|
||||
qreal GLRenderTarget::s_virtualScreenScale = 1.0;
|
||||
|
||||
void GLRenderTarget::initStatic()
|
||||
{
|
||||
|
|
|
@ -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<GLRenderTarget*> s_renderTargets;
|
||||
static QSize s_virtualScreenSize;
|
||||
static QRect s_virtualScreenGeometry;
|
||||
static qreal s_virtualScreenScale;
|
||||
|
||||
GLTexture mTexture;
|
||||
bool mValid;
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue