From 41df430aa8ad65e0d3f4e28576967d4ae9fd8e20 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 21 Nov 2023 19:57:59 +0200 Subject: [PATCH] plugins/screentransform: Properly exclude itself from previous screen capture --- src/plugins/screentransform/screentransform.cpp | 8 +++++++- src/plugins/screentransform/screentransform.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/screentransform/screentransform.cpp b/src/plugins/screentransform/screentransform.cpp index 0731ec25af..0643308ca7 100644 --- a/src/plugins/screentransform/screentransform.cpp +++ b/src/plugins/screentransform/screentransform.cpp @@ -89,6 +89,12 @@ void ScreenTransformEffect::addScreen(Output *screen) SceneDelegate delegate(scene, screen); delegate.setLayer(&layer); + // Avoid including this effect while capturing previous screen state. + m_capturing = true; + auto resetCapturing = qScopeGuard([this]() { + m_capturing = false; + }); + scene->prePaint(&delegate); effects->makeOpenGLContextCurrent(); @@ -264,7 +270,7 @@ void ScreenTransformEffect::paintScreen(const RenderTarget &renderTarget, const bool ScreenTransformEffect::isActive() const { - return !m_states.isEmpty(); + return !m_states.isEmpty() && !m_capturing; } } // namespace KWin diff --git a/src/plugins/screentransform/screentransform.h b/src/plugins/screentransform/screentransform.h index 80eca37a3d..27a87371d2 100644 --- a/src/plugins/screentransform/screentransform.h +++ b/src/plugins/screentransform/screentransform.h @@ -64,6 +64,7 @@ private: int m_currentTextureLocation = -1; int m_modelViewProjectioMatrixLocation = -1; int m_blendFactorLocation = -1; + bool m_capturing = false; }; } // namespace KWin