KWin
Loading...
Searching...
No Matches
drm_qpainter_layer.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: 2022 Xaver Hugl <xaver.hugl@gmail.com>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#pragma once
10#include "drm_layer.h"
11#include "utils/damagejournal.h"
12
13#include <QImage>
14
15namespace KWin
16{
17
18class QPainterSwapchain;
19class QPainterSwapchainSlot;
20class DrmPipeline;
21class DrmVirtualOutput;
22class DrmQPainterBackend;
23class DrmFramebuffer;
24
26{
27public:
29
30 std::optional<OutputLayerBeginFrameInfo> beginFrame() override;
31 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override;
32 bool checkTestBuffer() override;
33 std::shared_ptr<DrmFramebuffer> currentBuffer() const override;
34 QRegion currentDamage() const override;
35 void releaseBuffers() override;
36 std::chrono::nanoseconds queryRenderTime() const override;
37
38private:
39 bool doesSwapchainFit() const;
40
41 std::shared_ptr<QPainterSwapchain> m_swapchain;
42 std::shared_ptr<QPainterSwapchainSlot> m_currentBuffer;
43 std::shared_ptr<DrmFramebuffer> m_currentFramebuffer;
44 DamageJournal m_damageJournal;
45 std::chrono::steady_clock::time_point m_renderStart;
46 std::chrono::nanoseconds m_renderTime;
47};
48
50{
51public:
53
54 std::optional<OutputLayerBeginFrameInfo> beginFrame() override;
55 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override;
56
57 bool checkTestBuffer() override;
58 std::shared_ptr<DrmFramebuffer> currentBuffer() const override;
59 QRegion currentDamage() const override;
60 void releaseBuffers() override;
61 std::chrono::nanoseconds queryRenderTime() const override;
62
63private:
64 std::shared_ptr<QPainterSwapchain> m_swapchain;
65 std::shared_ptr<QPainterSwapchainSlot> m_currentBuffer;
66 std::shared_ptr<DrmFramebuffer> m_currentFramebuffer;
67 std::chrono::steady_clock::time_point m_renderStart;
68 std::chrono::nanoseconds m_renderTime;
69};
70
72{
73public:
75
76 std::optional<OutputLayerBeginFrameInfo> beginFrame() override;
77 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override;
78
79 QRegion currentDamage() const override;
80 void releaseBuffers() override;
81 std::chrono::nanoseconds queryRenderTime() const override;
82
83private:
84 QImage m_image;
85 QRegion m_currentDamage;
86 DrmVirtualOutput *const m_output;
87 std::chrono::steady_clock::time_point m_renderStart;
88 std::chrono::nanoseconds m_renderTime;
89};
90}
std::shared_ptr< DrmFramebuffer > currentBuffer() const override
std::chrono::nanoseconds queryRenderTime() const override
QRegion currentDamage() const override
bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override
std::optional< OutputLayerBeginFrameInfo > beginFrame() override
DrmCursorQPainterLayer(DrmPipeline *pipeline)
std::optional< OutputLayerBeginFrameInfo > beginFrame() override
DrmQPainterLayer(DrmPipeline *pipeline)
bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override
std::chrono::nanoseconds queryRenderTime() const override
std::shared_ptr< DrmFramebuffer > currentBuffer() const override
QRegion currentDamage() const override
std::optional< OutputLayerBeginFrameInfo > beginFrame() override
bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override
std::chrono::nanoseconds queryRenderTime() const override
DrmVirtualQPainterLayer(DrmVirtualOutput *output)
QRegion currentDamage() const override