2
* Copyright (C) 2014-2016 Canonical, Ltd.
4
* This program is free software: you can redistribute it and/or modify it under
5
* the terms of the GNU Lesser General Public License version 3, as published by
6
* the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but WITHOUT
9
* ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10
* SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
* Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
#include "glcontext.h"
1
/****************************************************************************
3
** Copyright (C) 2016 Canonical, Ltd.
4
** Contact: https://www.qt.io/licensing/
6
** This file is part of the plugins of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:LGPL$
9
** Commercial License Usage
10
** Licensees holding valid commercial Qt licenses may use this file in
11
** accordance with the commercial license agreement provided with the
12
** Software or, alternatively, in accordance with the terms contained in
13
** a written agreement between you and The Qt Company. For licensing terms
14
** and conditions see https://www.qt.io/terms-conditions. For further
15
** information use the contact form at https://www.qt.io/contact-us.
17
** GNU Lesser General Public License Usage
18
** Alternatively, this file may be used under the terms of the GNU Lesser
19
** General Public License version 3 as published by the Free Software
20
** Foundation and appearing in the file LICENSE.LGPL3 included in the
21
** packaging of this file. Please review the following information to
22
** ensure the GNU Lesser General Public License version 3 requirements
23
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
25
** GNU General Public License Usage
26
** Alternatively, this file may be used under the terms of the GNU
27
** General Public License version 2.0 or (at your option) the GNU General
28
** Public license version 3 or any later version approved by the KDE Free
29
** Qt Foundation. The licenses are as published by the Free Software
30
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31
** included in the packaging of this file. Please review the following
32
** information to ensure the GNU General Public License requirements will
33
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34
** https://www.gnu.org/licenses/gpl-3.0.html.
38
****************************************************************************/
41
#include "qmirclientglcontext.h"
42
#include "qmirclientlogging.h"
43
#include "qmirclientwindow.h"
21
45
#include <QOpenGLFramebufferObject>
22
46
#include <QtPlatformSupport/private/qeglconvenience_p.h>
23
47
#include <QtPlatformSupport/private/qeglpbuffer_p.h>
24
48
#include <QtGui/private/qopenglcontext_p.h>
26
Q_LOGGING_CATEGORY(ubuntumirclientGraphics, "ubuntumirclient.graphics", QtWarningMsg)
50
Q_LOGGING_CATEGORY(mirclientGraphics, "qt.qpa.mirclient.graphics", QtWarningMsg)
33
57
Q_ASSERT(config != nullptr);
35
59
const char *string = eglQueryString(display, EGL_VENDOR);
36
qCDebug(ubuntumirclientGraphics, "EGL vendor: %s", string);
60
qCDebug(mirclientGraphics, "EGL vendor: %s", string);
38
62
string = eglQueryString(display, EGL_VERSION);
39
qCDebug(ubuntumirclientGraphics, "EGL version: %s", string);
63
qCDebug(mirclientGraphics, "EGL version: %s", string);
41
65
string = eglQueryString(display, EGL_EXTENSIONS);
42
qCDebug(ubuntumirclientGraphics, "EGL extensions: %s", string);
66
qCDebug(mirclientGraphics, "EGL extensions: %s", string);
44
qCDebug(ubuntumirclientGraphics, "EGL configuration attributes:");
68
qCDebug(mirclientGraphics, "EGL configuration attributes:");
45
69
q_printEglConfig(display, config);
48
72
} // anonymous namespace
50
UbuntuOpenGLContext::UbuntuOpenGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share,
74
QMirClientOpenGLContext::QMirClientOpenGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share,
51
75
EGLDisplay display)
52
76
: QEGLPlatformContext(format, share, display, 0)
54
if (ubuntumirclientGraphics().isDebugEnabled()) {
78
if (mirclientGraphics().isDebugEnabled()) {
55
79
printEglConfig(display, eglConfig());
88
112
// Following method used internally in the base class QEGLPlatformContext to access
89
// the egl surface of a QPlatformSurface/UbuntuWindow
90
EGLSurface UbuntuOpenGLContext::eglSurfaceForPlatformSurface(QPlatformSurface *surface)
113
// the egl surface of a QPlatformSurface/QMirClientWindow
114
EGLSurface QMirClientOpenGLContext::eglSurfaceForPlatformSurface(QPlatformSurface *surface)
92
116
if (surface->surface()->surfaceClass() == QSurface::Window) {
93
return static_cast<UbuntuWindow *>(surface)->eglSurface();
117
return static_cast<QMirClientWindow *>(surface)->eglSurface();
95
119
return static_cast<QEGLPbuffer *>(surface)->pbuffer();
99
void UbuntuOpenGLContext::swapBuffers(QPlatformSurface *surface)
123
void QMirClientOpenGLContext::swapBuffers(QPlatformSurface *surface)
101
125
QEGLPlatformContext::swapBuffers(surface);
103
127
if (surface->surface()->surfaceClass() == QSurface::Window) {
104
128
// notify window on swap completion
105
auto ubuntuWindow = static_cast<UbuntuWindow *>(surface);
106
ubuntuWindow->onSwapBuffersDone();
129
auto platformWindow = static_cast<QMirClientWindow *>(surface);
130
platformWindow->onSwapBuffersDone();