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*>();
|
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()
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue