KWin
Loading...
Searching...
No Matches
x11_windowed_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 <QImage>
15#include <QList>
16#include <QObject>
17
18#include <chrono>
19#include <memory>
20
21namespace KWin
22{
23
24class GraphicsBufferAllocator;
25class QPainterSwapchainSlot;
26class QPainterSwapchain;
27class X11WindowedBackend;
28class X11WindowedOutput;
29class X11WindowedQPainterBackend;
30
32{
33public:
36
37 std::optional<OutputLayerBeginFrameInfo> beginFrame() override;
38 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override;
39 std::chrono::nanoseconds queryRenderTime() const override;
40
41 void present();
42
43private:
44 X11WindowedOutput *const m_output;
45 X11WindowedQPainterBackend *const m_backend;
46 std::unique_ptr<QPainterSwapchain> m_swapchain;
47 std::shared_ptr<QPainterSwapchainSlot> m_current;
48 std::chrono::steady_clock::time_point m_renderStart;
49 std::chrono::nanoseconds m_renderTime;
50};
51
53{
54 Q_OBJECT
55
56public:
58
59 std::optional<OutputLayerBeginFrameInfo> beginFrame() override;
60 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override;
61 std::chrono::nanoseconds queryRenderTime() const override;
62
63private:
64 QImage m_buffer;
65 X11WindowedOutput *m_output;
66 std::chrono::steady_clock::time_point m_renderStart;
67 std::chrono::nanoseconds m_renderTime;
68};
69
71{
72 Q_OBJECT
73public:
76
78
79 void present(Output *output, const std::shared_ptr<OutputFrame> &frame) override;
80 OutputLayer *primaryLayer(Output *output) override;
81 OutputLayer *cursorLayer(Output *output) override;
82
83private:
84 void addOutput(Output *output);
85 void removeOutput(Output *output);
86
87 struct Layers
88 {
89 std::unique_ptr<X11WindowedQPainterPrimaryLayer> primaryLayer;
90 std::unique_ptr<X11WindowedQPainterCursorLayer> cursorLayer;
91 };
92
93 X11WindowedBackend *m_backend;
94 std::unique_ptr<GraphicsBufferAllocator> m_allocator;
95 std::map<Output *, Layers> m_outputs;
96};
97
98} // namespace KWin
GraphicsBufferAllocator * graphicsBufferAllocator() const override
OutputLayer * cursorLayer(Output *output) override
void present(Output *output, const std::shared_ptr< OutputFrame > &frame) override
OutputLayer * primaryLayer(Output *output) override
X11WindowedQPainterBackend(X11WindowedBackend *backend)
bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override
std::chrono::nanoseconds queryRenderTime() const override
std::optional< OutputLayerBeginFrameInfo > beginFrame() override
bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override
std::optional< OutputLayerBeginFrameInfo > beginFrame() override
X11WindowedQPainterPrimaryLayer(X11WindowedOutput *output, X11WindowedQPainterBackend *backend)
std::chrono::nanoseconds queryRenderTime() const override