KWin
Loading...
Searching...
No Matches
virtual_qpainter_backend.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#pragma once
10
11#include "core/outputlayer.h"
13
14#include <QList>
15#include <QMap>
16#include <QObject>
17#include <chrono>
18#include <memory>
19
20namespace KWin
21{
22
23class GraphicsBufferAllocator;
24class QPainterSwapchainSlot;
25class QPainterSwapchain;
26class VirtualBackend;
27class VirtualQPainterBackend;
28
30{
31public:
33 ~VirtualQPainterLayer() override;
34
35 std::optional<OutputLayerBeginFrameInfo> beginFrame() override;
36 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override;
37 QImage *image();
38 std::chrono::nanoseconds queryRenderTime() const override;
39
40private:
41 Output *const m_output;
42 VirtualQPainterBackend *const m_backend;
43 std::unique_ptr<QPainterSwapchain> m_swapchain;
44 std::shared_ptr<QPainterSwapchainSlot> m_current;
45 std::chrono::steady_clock::time_point m_renderStart;
46 std::chrono::nanoseconds m_renderTime = std::chrono::nanoseconds::zero();
47};
48
50{
51 Q_OBJECT
52public:
55
57
58 void present(Output *output, const std::shared_ptr<OutputFrame> &frame) override;
59 VirtualQPainterLayer *primaryLayer(Output *output) override;
60
61private:
62 void addOutput(Output *output);
63 void removeOutput(Output *output);
64
65 std::unique_ptr<GraphicsBufferAllocator> m_allocator;
66 std::map<Output *, std::unique_ptr<VirtualQPainterLayer>> m_outputs;
67};
68
69} // namespace KWin
void present(Output *output, const std::shared_ptr< OutputFrame > &frame) override
GraphicsBufferAllocator * graphicsBufferAllocator() const override
VirtualQPainterBackend(VirtualBackend *backend)
VirtualQPainterLayer * primaryLayer(Output *output) override
std::chrono::nanoseconds queryRenderTime() const override
std::optional< OutputLayerBeginFrameInfo > beginFrame() override
bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override
VirtualQPainterLayer(Output *output, VirtualQPainterBackend *backend)