diff options
Diffstat (limited to 'src/core/compositor/compositor.h')
-rw-r--r-- | src/core/compositor/compositor.h | 92 |
1 files changed, 26 insertions, 66 deletions
diff --git a/src/core/compositor/compositor.h b/src/core/compositor/compositor.h index 316178891..501559060 100644 --- a/src/core/compositor/compositor.h +++ b/src/core/compositor/compositor.h @@ -1,50 +1,15 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2020 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef COMPOSITOR_H #define COMPOSITOR_H -#include "qtwebenginecoreglobal_p.h" +#include <QtWebEngineCore/private/qtwebenginecoreglobal_p.h> QT_BEGIN_NAMESPACE -class QImage; +class QQuickWindow; class QSize; +class QSGTexture; QT_END_NAMESPACE namespace viz { @@ -55,10 +20,9 @@ namespace QtWebEngineCore { // Produces composited frames for display. // -// Used by quick/widgets libraries for accessing the frame and -// controlling frame swapping. Must be cast to a subclass to access -// the frame as QImage or OpenGL texture, etc. -class Q_WEBENGINECORE_PRIVATE_EXPORT Compositor +// Used by quick/widgets libraries for accessing the frames and +// controlling frame swapping. +class Q_WEBENGINECORE_EXPORT Compositor { struct Binding; @@ -66,7 +30,8 @@ public: // Identifies the implementation type. enum class Type { Software, - OpenGL, + OpenGL, // TODO: Legacy, remove it with DisplaySkiaOutputDevice! + Native }; // Identifies a compositor. @@ -110,7 +75,7 @@ public: // Observes the compositor corresponding to the given id. // // Only one observer can exist per compositor. - class Q_WEBENGINECORE_PRIVATE_EXPORT Observer + class Q_WEBENGINECORE_EXPORT Observer { public: // Binding to compositor @@ -125,7 +90,7 @@ public: protected: Observer() = default; - ~Observer() = default; + ~Observer() { if (m_binding) unbind(); } private: Binding *m_binding = nullptr; @@ -153,31 +118,26 @@ public: virtual QSize size() = 0; // Whether frame needs an alpha channel. - // - // In software mode, the image format can be either - // QImage::Format_ARGB32_Premultiplied or - // QImage::Format_RGBA8888_Premultiplied - // - // In OpenGL mode, the texture format is either GL_RGBA or GL_RGB. - virtual bool hasAlphaChannel() = 0; - - // (Software) QImage of the frame. - // - // This is a big image so we should try not to make copies of it. - // In particular, the client should drop its QImage reference - // before calling swapFrame(), otherwise each swap will cause a - // detach. - virtual QImage image(); + virtual bool requiresAlphaChannel() = 0; - // (OpenGL) Wait on texture fence in Qt's current OpenGL context. + // Wait on texture to be ready aka. sync. virtual void waitForTexture(); - // (OpenGL) Texture of the frame. - virtual int textureId(); + // Release any held texture resources + virtual void releaseTexture(); + + // QSGTexture of the frame. + virtual QSGTexture *texture(QQuickWindow *win, uint32_t textureOptions); + + // Is the texture produced upside down? + virtual bool textureIsFlipped(); + + // Release resources created in texture() + virtual void releaseResources(); protected: Compositor(Type type) : m_type(type) { } - ~Compositor() = default; + virtual ~Compositor() { if (m_binding) unbind(); } private: template<typename T> |