KWin
Loading...
Searching...
No Matches
renderbackend.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#pragma once
8
9#include "core/rendertarget.h"
10#include "effect/globals.h"
11
12#include <QObject>
13
14#include <memory>
15
16namespace KWin
17{
18
19class GraphicsBuffer;
20class GraphicsBufferAllocator;
21class Output;
22class OverlayWindow;
23class OutputLayer;
24class SurfacePixmap;
25class SurfacePixmapX11;
26class SurfaceTexture;
27class PresentationFeedback;
28class RenderLoop;
29
31{
32public:
33 explicit PresentationFeedback() = default;
36 virtual ~PresentationFeedback() = default;
37
38 virtual void presented(std::chrono::nanoseconds refreshCycleDuration, std::chrono::nanoseconds timestamp, PresentationMode mode) = 0;
39};
40
41class KWIN_EXPORT OutputFrame
42{
43public:
44 explicit OutputFrame(RenderLoop *loop);
46
47 void presented(std::chrono::nanoseconds refreshDuration, std::chrono::nanoseconds timestamp, std::chrono::nanoseconds renderTime, PresentationMode mode);
48 void failed();
49
50 void addFeedback(std::unique_ptr<PresentationFeedback> &&feedback);
51
52 void setContentType(ContentType type);
53 std::optional<ContentType> contentType() const;
54
55 void setPresentationMode(PresentationMode mode);
56 PresentationMode presentationMode() const;
57
58private:
59 RenderLoop *const m_loop;
60 std::vector<std::unique_ptr<PresentationFeedback>> m_feedbacks;
61 std::optional<ContentType> m_contentType;
62 PresentationMode m_presentationMode = PresentationMode::VSync;
63};
64
68class KWIN_EXPORT RenderBackend : public QObject
69{
70 Q_OBJECT
71
72public:
73 explicit RenderBackend(QObject *parent = nullptr);
74
75 virtual CompositingType compositingType() const = 0;
76 virtual OverlayWindow *overlayWindow() const;
77
78 virtual bool checkGraphicsReset();
79
80 virtual OutputLayer *primaryLayer(Output *output) = 0;
81 virtual OutputLayer *cursorLayer(Output *output);
82 virtual void present(Output *output, const std::shared_ptr<OutputFrame> &frame) = 0;
83
84 virtual GraphicsBufferAllocator *graphicsBufferAllocator() const;
85
86 virtual bool testImportBuffer(GraphicsBuffer *buffer);
87 virtual QHash<uint32_t, QList<uint64_t>> supportedFormats() const;
88
89 virtual std::unique_ptr<SurfaceTexture> createSurfaceTextureX11(SurfacePixmapX11 *pixmap);
90 virtual std::unique_ptr<SurfaceTexture> createSurfaceTextureWayland(SurfacePixmap *pixmap);
91};
92
93} // namespace KWin
PresentationFeedback(const PresentationFeedback &copy)=delete
virtual ~PresentationFeedback()=default
virtual void presented(std::chrono::nanoseconds refreshCycleDuration, std::chrono::nanoseconds timestamp, PresentationMode mode)=0
PresentationFeedback(PresentationFeedback &&move)=default
virtual OutputLayer * primaryLayer(Output *output)=0
virtual CompositingType compositingType() const =0
virtual void present(Output *output, const std::shared_ptr< OutputFrame > &frame)=0
PresentationMode
Definition globals.h:276
CompositingType
Definition globals.h:28
ContentType
Definition globals.h:284