File indexing completed on 2024-05-12 17:02:07

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include "outputbackend.h"
0011 
0012 #include "dmabuftexture.h"
0013 #include "inputbackend.h"
0014 #include "openglbackend.h"
0015 #include "output.h"
0016 #include "outputconfiguration.h"
0017 #include "qpainterbackend.h"
0018 
0019 namespace KWin
0020 {
0021 
0022 OutputBackend::OutputBackend(QObject *parent)
0023     : QObject(parent)
0024     , m_eglDisplay(EGL_NO_DISPLAY)
0025 {
0026 }
0027 
0028 OutputBackend::~OutputBackend()
0029 {
0030 }
0031 
0032 std::unique_ptr<InputBackend> OutputBackend::createInputBackend()
0033 {
0034     return nullptr;
0035 }
0036 
0037 std::unique_ptr<OpenGLBackend> OutputBackend::createOpenGLBackend()
0038 {
0039     return nullptr;
0040 }
0041 
0042 std::unique_ptr<QPainterBackend> OutputBackend::createQPainterBackend()
0043 {
0044     return nullptr;
0045 }
0046 
0047 std::optional<DmaBufParams> OutputBackend::testCreateDmaBuf(const QSize &size, quint32 format, const QVector<uint64_t> &modifiers)
0048 {
0049     return {};
0050 }
0051 
0052 std::shared_ptr<DmaBufTexture> OutputBackend::createDmaBufTexture(const QSize &size, quint32 format, uint64_t modifier)
0053 {
0054     return {};
0055 }
0056 
0057 std::shared_ptr<DmaBufTexture> OutputBackend::createDmaBufTexture(const DmaBufParams &attribs)
0058 {
0059     return createDmaBufTexture({attribs.width, attribs.height}, attribs.format, attribs.modifier);
0060 }
0061 
0062 bool OutputBackend::applyOutputChanges(const OutputConfiguration &config)
0063 {
0064     const auto availableOutputs = outputs();
0065     QVector<Output *> toBeEnabledOutputs;
0066     QVector<Output *> toBeDisabledOutputs;
0067     for (const auto &output : availableOutputs) {
0068         if (config.constChangeSet(output)->enabled) {
0069             toBeEnabledOutputs << output;
0070         } else {
0071             toBeDisabledOutputs << output;
0072         }
0073     }
0074     for (const auto &output : toBeEnabledOutputs) {
0075         output->applyChanges(config);
0076     }
0077     for (const auto &output : toBeDisabledOutputs) {
0078         output->applyChanges(config);
0079     }
0080     return true;
0081 }
0082 
0083 Output *OutputBackend::findOutput(const QString &name) const
0084 {
0085     const auto candidates = outputs();
0086     for (Output *candidate : candidates) {
0087         if (candidate->name() == name) {
0088             return candidate;
0089         }
0090     }
0091     return nullptr;
0092 }
0093 
0094 Output *OutputBackend::createVirtualOutput(const QString &name, const QSize &size, double scale)
0095 {
0096     return nullptr;
0097 }
0098 
0099 void OutputBackend::removeVirtualOutput(Output *output)
0100 {
0101     Q_ASSERT(!output);
0102 }
0103 
0104 EGLDisplay KWin::OutputBackend::sceneEglDisplay() const
0105 {
0106     return m_eglDisplay;
0107 }
0108 
0109 void OutputBackend::setSceneEglDisplay(EGLDisplay display)
0110 {
0111     m_eglDisplay = display;
0112 }
0113 
0114 QString OutputBackend::supportInformation() const
0115 {
0116     return QStringLiteral("Name: %1\n").arg(metaObject()->className());
0117 }
0118 
0119 EGLContext OutputBackend::sceneEglGlobalShareContext() const
0120 {
0121     return m_globalShareContext;
0122 }
0123 
0124 void OutputBackend::setSceneEglGlobalShareContext(EGLContext context)
0125 {
0126     m_globalShareContext = context;
0127 }
0128 
0129 } // namespace KWin