/* KWin - the KDE window manager This file is part of the KDE project. SPDX-FileCopyrightText: 2015 Martin Gräßlin SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include "core/outputlayer.h" #include "core/renderbackend.h" #include "platformsupport/scenes/qpainter/qpainterbackend.h" #include #include #include #include #include namespace KWin { class GraphicsBufferAllocator; class QPainterSwapchainSlot; class QPainterSwapchain; class VirtualBackend; class VirtualQPainterBackend; class VirtualQPainterLayer : public OutputLayer { public: VirtualQPainterLayer(Output *output, VirtualQPainterBackend *backend); ~VirtualQPainterLayer() override; std::optional doBeginFrame() override; bool doEndFrame(const QRegion &renderedRegion, const QRegion &damagedRegion, OutputFrame *frame) override; QImage *image(); DrmDevice *scanoutDevice() const override; QHash> supportedDrmFormats() const override; private: VirtualQPainterBackend *const m_backend; std::unique_ptr m_swapchain; std::shared_ptr m_current; std::unique_ptr m_renderTime; }; class VirtualQPainterBackend : public QPainterBackend { Q_OBJECT public: VirtualQPainterBackend(VirtualBackend *backend); ~VirtualQPainterBackend() override; GraphicsBufferAllocator *graphicsBufferAllocator() const; bool present(Output *output, const std::shared_ptr &frame) override; VirtualQPainterLayer *primaryLayer(Output *output) override; private: void addOutput(Output *output); void removeOutput(Output *output); std::unique_ptr m_allocator; std::map> m_outputs; }; } // namespace KWin