diff --git a/libkwineffects/kwinglutils.h b/libkwineffects/kwinglutils.h --- a/libkwineffects/kwinglutils.h +++ b/libkwineffects/kwinglutils.h @@ -534,6 +534,7 @@ static QSize s_virtualScreenSize; static QRect s_virtualScreenGeometry; static qreal s_virtualScreenScale; + static GLint s_virtualScreenViewport[4]; GLTexture mTexture; bool mValid; diff --git a/libkwineffects/kwinglutils.cpp b/libkwineffects/kwinglutils.cpp --- a/libkwineffects/kwinglutils.cpp +++ b/libkwineffects/kwinglutils.cpp @@ -1038,6 +1038,7 @@ QSize GLRenderTarget::s_virtualScreenSize; QRect GLRenderTarget::s_virtualScreenGeometry; qreal GLRenderTarget::s_virtualScreenScale = 1.0; +GLint GLRenderTarget::s_virtualScreenViewport[4]; void GLRenderTarget::initStatic() { @@ -1074,6 +1075,9 @@ void GLRenderTarget::pushRenderTarget(GLRenderTarget* target) { + if (s_renderTargets.isEmpty()) { + glGetIntegerv(GL_VIEWPORT, s_virtualScreenViewport); + } target->enable(); s_renderTargets.push(target); } @@ -1086,10 +1090,8 @@ if (!s_renderTargets.isEmpty()) { s_renderTargets.top()->enable(); } else { - glViewport (-s_virtualScreenGeometry.x(), s_virtualScreenGeometry.height() - s_virtualScreenSize.height() - s_virtualScreenGeometry.y(), - s_virtualScreenSize.width(), s_virtualScreenSize.height()); + glViewport (s_virtualScreenViewport[0], s_virtualScreenViewport[1], s_virtualScreenViewport[2], s_virtualScreenViewport[3]); } - return ret; }