From f24103481e8711a2ece7a21330e6d485d99abc06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Fri, 11 May 2012 19:55:56 +0200 Subject: [PATCH] Ensure ScreenTransformation matrix is reset after rendering cube Cube effect modifies the ScreenTransformation matrix. While each window resets the matrix on a global level it's not reset. That means if the last rendered window had the screen rotated the ScreenTransformation keeps the rotation even after the cube ended. This causes a rotated window in e.g. TaskbarThumbnails. REVIEW: 104918 CCBUG: 299869 --- effects/cube/cube.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/effects/cube/cube.cpp b/effects/cube/cube.cpp index 34389c45bd..43bdb8d47a 100644 --- a/effects/cube/cube.cpp +++ b/effects/cube/cube.cpp @@ -599,6 +599,13 @@ void CubeEffect::paintScreen(int mask, QRegion region, ScreenPaintData& data) desktopNameFrame->setText(effects->desktopName(frontDesktop)); desktopNameFrame->render(region, opacity); } + // restore the ScreenTransformation after all desktops are painted + // if not done GenericShader keeps the rotation data and transforms windows incorrectly in other rendering calls + if (ShaderManager::instance()->isValid()) { + GLShader *shader = ShaderManager::instance()->pushShader(KWin::ShaderManager::GenericShader); + shader->setUniform(GLShader::ScreenTransformation, QMatrix4x4()); + ShaderManager::instance()->popShader(); + } } else { effects->paintScreen(mask, region, data); }