You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.5 KiB
93 lines
2.5 KiB
/* |
|
SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#pragma once |
|
|
|
#include "core/rendertarget.h" |
|
#include "effect/globals.h" |
|
|
|
#include <QObject> |
|
|
|
#include <memory> |
|
|
|
namespace KWin |
|
{ |
|
|
|
class GraphicsBuffer; |
|
class Output; |
|
class OverlayWindow; |
|
class OutputLayer; |
|
class SurfacePixmap; |
|
class SurfacePixmapX11; |
|
class SurfaceTexture; |
|
class PresentationFeedback; |
|
class RenderLoop; |
|
class DrmDevice; |
|
|
|
class PresentationFeedback |
|
{ |
|
public: |
|
explicit PresentationFeedback() = default; |
|
PresentationFeedback(const PresentationFeedback ©) = delete; |
|
PresentationFeedback(PresentationFeedback &&move) = default; |
|
virtual ~PresentationFeedback() = default; |
|
|
|
virtual void presented(std::chrono::nanoseconds refreshCycleDuration, std::chrono::nanoseconds timestamp, PresentationMode mode) = 0; |
|
}; |
|
|
|
class KWIN_EXPORT OutputFrame |
|
{ |
|
public: |
|
explicit OutputFrame(RenderLoop *loop); |
|
~OutputFrame(); |
|
|
|
void presented(std::chrono::nanoseconds refreshDuration, std::chrono::nanoseconds timestamp, std::chrono::nanoseconds renderTime, PresentationMode mode); |
|
void failed(); |
|
|
|
void addFeedback(std::unique_ptr<PresentationFeedback> &&feedback); |
|
|
|
void setContentType(ContentType type); |
|
std::optional<ContentType> contentType() const; |
|
|
|
void setPresentationMode(PresentationMode mode); |
|
PresentationMode presentationMode() const; |
|
|
|
private: |
|
RenderLoop *const m_loop; |
|
std::vector<std::unique_ptr<PresentationFeedback>> m_feedbacks; |
|
std::optional<ContentType> m_contentType; |
|
PresentationMode m_presentationMode = PresentationMode::VSync; |
|
}; |
|
|
|
/** |
|
* The RenderBackend class is the base class for all rendering backends. |
|
*/ |
|
class KWIN_EXPORT RenderBackend : public QObject |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
explicit RenderBackend(QObject *parent = nullptr); |
|
|
|
virtual CompositingType compositingType() const = 0; |
|
virtual OverlayWindow *overlayWindow() const; |
|
|
|
virtual bool checkGraphicsReset(); |
|
|
|
virtual OutputLayer *primaryLayer(Output *output) = 0; |
|
virtual OutputLayer *cursorLayer(Output *output); |
|
virtual void present(Output *output, const std::shared_ptr<OutputFrame> &frame) = 0; |
|
|
|
virtual DrmDevice *drmDevice() const; |
|
|
|
virtual bool testImportBuffer(GraphicsBuffer *buffer); |
|
virtual QHash<uint32_t, QList<uint64_t>> supportedFormats() const; |
|
|
|
virtual std::unique_ptr<SurfaceTexture> createSurfaceTextureX11(SurfacePixmapX11 *pixmap); |
|
virtual std::unique_ptr<SurfaceTexture> createSurfaceTextureWayland(SurfacePixmap *pixmap); |
|
}; |
|
|
|
} // namespace KWin
|
|
|