summaryrefslogtreecommitdiffstats
path: root/src/core/ozone/gl_share_context_qt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ozone/gl_share_context_qt.cpp')
-rw-r--r--src/core/ozone/gl_share_context_qt.cpp93
1 files changed, 30 insertions, 63 deletions
diff --git a/src/core/ozone/gl_share_context_qt.cpp b/src/core/ozone/gl_share_context_qt.cpp
index c2cfecb8b..b1c5e201f 100644
--- a/src/core/ozone/gl_share_context_qt.cpp
+++ b/src/core/ozone/gl_share_context_qt.cpp
@@ -1,87 +1,49 @@
-/****************************************************************************
-**
-** 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
#include "gl_share_context_qt.h"
#include <QtGui/qtgui-config.h>
#include <qpa/qplatformnativeinterface.h>
-#include <QtGui/qopenglcontext_platform.h>
-#if defined(Q_OS_MACOS)
-#include "macos_context_type_helper.h"
-#endif
+
+#include "ui/gl/gl_context_egl.h"
+#include "ui/gl/gl_implementation.h"
+
#if QT_CONFIG(opengl)
+#include <QtGui/qopenglcontext_platform.h>
#include <QOpenGLContext>
#include <QOpenGLExtraFunctions>
-#endif
+#endif // QT_CONFIG(opengl)
namespace QtWebEngineCore {
-QtShareGLContext::QtShareGLContext(QOpenGLContext *qtContext)
+QtShareGLContext::QtShareGLContext(QOpenGLContext *context)
: gl::GLContext(nullptr), m_handle(nullptr)
{
#if QT_CONFIG(opengl)
- QOpenGLContext *context = QOpenGLContext::globalShareContext();
#if defined(Q_OS_MACOS)
- auto *ctx = context->nativeInterface<QNativeInterface::QCocoaGLContext>();
- if (ctx)
- m_handle = cglContext(ctx->nativeContext());
+ qFatal("macOS only support using ANGLE.");
#endif
#if defined(Q_OS_WIN)
- auto *ctx = context->nativeInterface<QNativeInterface::QWGLContext>();
+ auto *win_ctx = context->nativeInterface<QNativeInterface::QWGLContext>();
+ if (win_ctx && !m_handle)
+ m_handle = (void *)win_ctx->nativeContext();
#endif
-#if defined(Q_OS_LINUX)
- auto *ctx = context->nativeInterface<QNativeInterface::QGLXContext>();
+#if QT_CONFIG(xcb_glx_plugin)
+ auto *glx_ctx = context->nativeInterface<QNativeInterface::QGLXContext>();
+ if (glx_ctx && !m_handle)
+ m_handle = (void *)glx_ctx->nativeContext();
#endif
- if (ctx && !m_handle)
- m_handle = (void *)ctx->nativeContext();
#if QT_CONFIG(egl)
- if (!m_handle) {
- auto *ctx = context->nativeInterface<QNativeInterface::QEGLContext>();
- if (ctx)
- m_handle = (void *)ctx->nativeContext();
- }
+ auto *egl_ctx = context->nativeInterface<QNativeInterface::QEGLContext>();
+ if (egl_ctx && !m_handle)
+ m_handle = (void *)egl_ctx->nativeContext();
#endif
if (!m_handle)
- qFatal("Could not get handle for shared contex");
+ qFatal("Could not get handle for shared context.");
#endif // QT_CONFIG(opengl)
}
-unsigned int QtShareGLContext::CheckStickyGraphicsResetStatus()
+unsigned int QtShareGLContext::CheckStickyGraphicsResetStatusImpl()
{
#if QT_CONFIG(opengl)
if (QOpenGLContext *context = QOpenGLContext::globalShareContext()) {
@@ -94,17 +56,22 @@ unsigned int QtShareGLContext::CheckStickyGraphicsResetStatus()
void ShareGroupQt::AboutToAddFirstContext()
{
+ if (gl::GetGLImplementation() == gl::kGLImplementationEGLANGLE) {
+ m_shareContextQt = new gl::GLContextEGL(nullptr);
+ return;
+ }
+
#if QT_CONFIG(opengl)
// This currently has to be setup by ::main in all applications using QQuickWebEngineView with
// delegated rendering.
QOpenGLContext *shareContext = QOpenGLContext::globalShareContext();
if (!shareContext) {
qFatal("QWebEngine: OpenGL resource sharing is not set up in QtQuick. Please make sure to "
- "call QtWebEngine::initialize() in your main() function before QCoreApplication is "
- "created.");
+ "call QtWebEngineQuick::initialize() in your main() function before "
+ "QCoreApplication is created.");
}
m_shareContextQt = new QtShareGLContext(shareContext);
-#endif
+#endif // QT_CONFIG(opengl)
}
} // namespace