KWin
Loading...
Searching...
No Matches
abstract_egl_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#include "opengl/eglcontext.h"
11#include "opengl/egldisplay.h"
14
15#include <QObject>
16#include <epoxy/egl.h>
17
18struct wl_display;
19struct wl_resource;
20
21namespace KWin
22{
23
24struct DmaBufAttributes;
25class Output;
26
27class KWIN_EXPORT AbstractEglBackend : public OpenGLBackend
28{
29 Q_OBJECT
30public:
31 ~AbstractEglBackend() override;
32 bool makeCurrent() override;
33 void doneCurrent() override;
34
35 EGLSurface surface() const;
36 EGLConfig config() const;
37 EglDisplay *eglDisplayObject() const;
38 EglContext *contextObject();
39
40 bool testImportBuffer(GraphicsBuffer *buffer) override;
41 QHash<uint32_t, QList<uint64_t>> supportedFormats() const override;
42
43 QList<LinuxDmaBufV1Feedback::Tranche> tranches() const;
44 dev_t deviceId() const;
45 virtual bool prefer10bpc() const;
46
47 std::shared_ptr<GLTexture> importDmaBufAsTexture(const DmaBufAttributes &attributes) const;
48 EGLImageKHR importDmaBufAsImage(const DmaBufAttributes &attributes) const;
49 EGLImageKHR importDmaBufAsImage(const DmaBufAttributes &attributes, int plane, int format, const QSize &size) const;
50 EGLImageKHR importBufferAsImage(GraphicsBuffer *buffer);
51 EGLImageKHR importBufferAsImage(GraphicsBuffer *buffer, int plane, int format, const QSize &size);
52
53protected:
54 AbstractEglBackend(dev_t deviceId = 0);
55 void setSurface(const EGLSurface &surface);
56 void cleanup();
57 virtual void cleanupSurfaces();
58 void setEglDisplay(EglDisplay *display);
59 void initKWinGL();
60 void initClientExtensions();
61 void initWayland();
62 bool hasClientExtension(const QByteArray &ext) const;
63 bool isOpenGLES() const;
64 bool createContext(EGLConfig config);
65
66 bool ensureGlobalShareContext(EGLConfig config);
67 void destroyGlobalShareContext();
68 ::EGLContext createContextInternal(::EGLContext sharedContext);
69 void teardown();
70
71 EglDisplay *m_display = nullptr;
72 EGLSurface m_surface = EGL_NO_SURFACE;
73 std::shared_ptr<EglContext> m_context;
74 QList<QByteArray> m_clientExtensions;
75 const dev_t m_deviceId;
76 QList<LinuxDmaBufV1Feedback::Tranche> m_tranches;
77 QHash<std::pair<GraphicsBuffer *, int>, EGLImageKHR> m_importedBuffers;
78};
79
80}
::EGLContext createContextInternal(::EGLContext sharedContext)
QHash< std::pair< GraphicsBuffer *, int >, EGLImageKHR > m_importedBuffers
QList< LinuxDmaBufV1Feedback::Tranche > m_tranches
std::shared_ptr< EglContext > m_context
QList< QByteArray > m_clientExtensions
The OpenGLBackend creates and holds the OpenGL context and is responsible for Texture from Pixmap.
void * EGLImageKHR
GLenum format
Definition gltexture.cpp:49