diff --git a/effects.cpp b/effects.cpp --- a/effects.cpp +++ b/effects.cpp @@ -32,7 +32,6 @@ #include "group.h" #include "osd.h" #include "pointer_input.h" -#include "scene_xrender.h" #include "scene_qpainter.h" #include "unmanaged.h" #ifdef KWIN_BUILD_TABBOX @@ -1324,11 +1323,7 @@ unsigned long EffectsHandlerImpl::xrenderBufferPicture() { -#ifdef KWIN_HAVE_XRENDER_COMPOSITING - if (SceneXrender* s = dynamic_cast< SceneXrender* >(m_scene)) - return s->bufferPicture(); -#endif - return None; + return m_scene->bufferPicture(); } QPainter *EffectsHandlerImpl::scenePainter() diff --git a/scene.h b/scene.h --- a/scene.h +++ b/scene.h @@ -157,6 +157,12 @@ **/ virtual bool animationsSupported() const = 0; + /** + * The render buffer used by an XRender based compositor scene. + * Default implementation returns XCB_RENDER_PICTURE_NONE + **/ + virtual xcb_render_picture_t bufferPicture() const; + Q_SIGNALS: void frameRendered(); diff --git a/scene.cpp b/scene.cpp --- a/scene.cpp +++ b/scene.cpp @@ -652,6 +652,11 @@ return QMatrix4x4(); } +xcb_render_picture_t Scene::bufferPicture() const +{ + return XCB_RENDER_PICTURE_NONE; +} + //**************************************** // Scene::Window //**************************************** diff --git a/scene_xrender.h b/scene_xrender.h --- a/scene_xrender.h +++ b/scene_xrender.h @@ -160,7 +160,7 @@ virtual Scene::EffectFrame *createEffectFrame(EffectFrameImpl *frame); virtual Shadow *createShadow(Toplevel *toplevel); virtual void screenGeometryChanged(const QSize &size); - xcb_render_picture_t bufferPicture(); + xcb_render_picture_t bufferPicture() const override; virtual OverlayWindow *overlayWindow() { return m_backend->overlayWindow(); } @@ -253,7 +253,7 @@ }; inline -xcb_render_picture_t SceneXrender::bufferPicture() +xcb_render_picture_t SceneXrender::bufferPicture() const { return m_backend->buffer(); }