summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/core_gyp_generator.pro9
-rw-r--r--src/core/ozone_platform_eglfs.cpp67
-rw-r--r--src/core/ozone_platform_eglfs.h76
-rw-r--r--src/core/qtwebengine_extras.gypi3
-rw-r--r--src/core/surface_factory_qt.cpp107
-rw-r--r--src/core/surface_factory_qt.h67
-rw-r--r--tools/qmake/mkspecs/features/gyp_generator.prf11
7 files changed, 333 insertions, 7 deletions
diff --git a/src/core/core_gyp_generator.pro b/src/core/core_gyp_generator.pro
index a2bf2a19c..8b90bc91c 100644
--- a/src/core/core_gyp_generator.pro
+++ b/src/core/core_gyp_generator.pro
@@ -61,7 +61,10 @@ SOURCES = \
web_event_factory.cpp \
yuv_video_node.cpp \
qrc_protocol_handler_qt.cpp \
- url_request_qrc_job_qt.cpp
+ url_request_qrc_job_qt.cpp \
+ surface_factory_qt.cpp \
+ ozone_platform_eglfs.cpp
+
HEADERS = \
backing_store_qt.h \
@@ -99,4 +102,6 @@ HEADERS = \
web_event_factory.h \
yuv_video_node.h \
qrc_protocol_handler_qt.h \
- url_request_qrc_job_qt.h
+ url_request_qrc_job_qt.h \
+ surface_factory_qt.h \
+ ozone_platform_eglfs.h
diff --git a/src/core/ozone_platform_eglfs.cpp b/src/core/ozone_platform_eglfs.cpp
new file mode 100644
index 000000000..b83152a36
--- /dev/null
+++ b/src/core/ozone_platform_eglfs.cpp
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "ozone_platform_eglfs.h"
+
+#include "ui/ozone/ozone_platform.h"
+
+#if defined(USE_OZONE)
+
+namespace ui {
+
+OzonePlatformEglfs::OzonePlatformEglfs() {}
+
+OzonePlatformEglfs::~OzonePlatformEglfs() {}
+
+gfx::SurfaceFactoryOzone* OzonePlatformEglfs::GetSurfaceFactoryOzone() {
+ return &surface_factory_ozone_;
+}
+
+ui::EventFactoryOzone* OzonePlatformEglfs::GetEventFactoryOzone() {
+ return &event_factory_ozone_;
+}
+
+OzonePlatform* CreateOzonePlatformEglfs() { return new OzonePlatformEglfs; }
+
+} // namespace ui
+
+#endif
+
diff --git a/src/core/ozone_platform_eglfs.h b/src/core/ozone_platform_eglfs.h
new file mode 100644
index 000000000..35205ac1f
--- /dev/null
+++ b/src/core/ozone_platform_eglfs.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UI_OZONE_PLATFORM_EGLFS_OZONE_PLATFORM_EGLFS_H_
+#define UI_OZONE_PLATFORM_EGLFS_OZONE_PLATFORM_EGLFS_H_
+
+#include "ui/events/ozone/evdev/event_factory.h"
+#include "ui/gfx/ozone/dri/dri_surface_factory.h"
+#include "ui/ozone/ozone_platform.h"
+
+#include "surface_factory_qt.h"
+
+#if defined(USE_OZONE)
+
+namespace ui {
+
+class OzonePlatformEglfs : public OzonePlatform {
+ public:
+ OzonePlatformEglfs();
+ virtual ~OzonePlatformEglfs();
+
+ virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE;
+ virtual ui::EventFactoryOzone* GetEventFactoryOzone() OVERRIDE;
+
+ private:
+ SurfaceFactoryQt surface_factory_ozone_;
+ ui::EventFactoryEvdev event_factory_ozone_;
+
+ DISALLOW_COPY_AND_ASSIGN(OzonePlatformEglfs);
+};
+
+// Constructor hook for use in ozone_platform_list.cc
+OzonePlatform* CreateOzonePlatformEglfs();
+
+} // namespace ui
+
+#endif // defined(USE_OZONE)
+#endif // UI_OZONE_PLATFORM_EGLFS_OZONE_PLATFORM_EGLFS_H_
diff --git a/src/core/qtwebengine_extras.gypi b/src/core/qtwebengine_extras.gypi
index bb39116f9..c27cd70d0 100644
--- a/src/core/qtwebengine_extras.gypi
+++ b/src/core/qtwebengine_extras.gypi
@@ -46,6 +46,9 @@
},
'conditions': [
[ 'qt_os=="embedded_linux"', {
+ 'variables': {
+ 'external_ozone_platforms': [ 'eglfs', ],
+ },
'target_defaults': {
'defines': [
'GL_GLEXT_PROTOTYPES',
diff --git a/src/core/surface_factory_qt.cpp b/src/core/surface_factory_qt.cpp
new file mode 100644
index 000000000..3b4dcfc8b
--- /dev/null
+++ b/src/core/surface_factory_qt.cpp
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "surface_factory_qt.h"
+
+#include "type_conversion.h"
+
+#include "base/files/file_path.h"
+#include "base/native_library.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_implementation_linux.h"
+
+#include <QGuiApplication>
+#include <qpa/qplatformnativeinterface.h>
+
+#if defined(USE_OZONE)
+#include <EGL/egl.h>
+
+#ifndef QT_LIBDIR_EGL
+#define QT_LIBDIR_EGL "/usr/lib"
+#endif
+#ifndef QT_LIBDIR_GLES2
+#define QT_LIBDIR_GLES2 QT_LIBDIR_EGL
+#endif
+
+bool SurfaceFactoryQt::LoadEGLGLES2Bindings(AddGLLibraryCallback add_gl_library, SetGLGetProcAddressProcCallback set_gl_get_proc_address)
+{
+
+ base::FilePath libEGLPath = toFilePath(QT_LIBDIR_EGL);
+ libEGLPath = libEGLPath.Append("libEGL.so");
+ base::NativeLibrary eglLibrary = gfx::LoadLibrary(libEGLPath);
+ if (!eglLibrary) {
+ LOG(ERROR) << "Failed to load EGL: " << libEGLPath.LossyDisplayName();
+ return false;
+ }
+
+ base::FilePath libGLES2Path = toFilePath(QT_LIBDIR_GLES2);
+ libGLES2Path = libGLES2Path.Append("libGLESv2.so");
+ base::NativeLibrary gles2Library = gfx::LoadLibrary(libGLES2Path);
+ if (!gles2Library) {
+ LOG(ERROR) << "failed to load GLESv2: " << libGLES2Path.LossyDisplayName();
+ return false;
+ }
+
+ gfx::GLGetProcAddressProc get_proc_address = reinterpret_cast<gfx::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglLibrary, "eglGetProcAddress"));
+ if (!get_proc_address) {
+ LOG(ERROR) << "eglGetProcAddress not found.";
+ base::UnloadNativeLibrary(eglLibrary);
+ base::UnloadNativeLibrary(gles2Library);
+ return false;
+ }
+
+ gfx::SetGLGetProcAddressProc(get_proc_address);
+ gfx::AddGLNativeLibrary(eglLibrary);
+ gfx::AddGLNativeLibrary(gles2Library);
+ return true;
+}
+
+intptr_t SurfaceFactoryQt::GetNativeDisplay()
+{
+ static void *display = qApp->platformNativeInterface()->nativeResourceForIntegration(QByteArrayLiteral("nativedisplay"));
+
+ if (display)
+ return reinterpret_cast<intptr_t>(display);
+
+ return reinterpret_cast<intptr_t>(EGL_DEFAULT_DISPLAY);
+}
+
+#endif
+
diff --git a/src/core/surface_factory_qt.h b/src/core/surface_factory_qt.h
new file mode 100644
index 000000000..28a377e2c
--- /dev/null
+++ b/src/core/surface_factory_qt.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SURFACE_FACTORY_QT
+#define SURFACE_FACTORY_QT
+
+#if defined(USE_OZONE)
+
+#include "ui/gfx/ozone/surface_factory_ozone.h"
+
+#include <QtGlobal>
+
+class SurfaceFactoryQt
+ : public gfx::SurfaceFactoryOzone
+{
+ virtual bool LoadEGLGLES2Bindings(AddGLLibraryCallback add_gl_library, SetGLGetProcAddressProcCallback set_gl_get_proc_address) Q_DECL_OVERRIDE;
+ virtual intptr_t GetNativeDisplay() Q_DECL_OVERRIDE;
+ virtual gfx::SurfaceFactoryOzone::HardwareState InitializeHardware() Q_DECL_OVERRIDE { return gfx::SurfaceFactoryOzone::INITIALIZED; }
+ virtual void ShutdownHardware() Q_DECL_OVERRIDE {}
+ virtual gfx::AcceleratedWidget GetAcceleratedWidget() Q_DECL_OVERRIDE { return 0; }
+ virtual gfx::AcceleratedWidget RealizeAcceleratedWidget(gfx::AcceleratedWidget w) Q_DECL_OVERRIDE { return 0; }
+ virtual bool AttemptToResizeAcceleratedWidget(gfx::AcceleratedWidget w, const gfx::Rect& bounds) Q_DECL_OVERRIDE { return false; }
+ virtual gfx::VSyncProvider* GetVSyncProvider(gfx::AcceleratedWidget w) Q_DECL_OVERRIDE { return NULL; }
+};
+
+#endif
+
+#endif // SURFACE_FACTORY_QT
+
diff --git a/tools/qmake/mkspecs/features/gyp_generator.prf b/tools/qmake/mkspecs/features/gyp_generator.prf
index 4e1b6f5bb..b5d69497b 100644
--- a/tools/qmake/mkspecs/features/gyp_generator.prf
+++ b/tools/qmake/mkspecs/features/gyp_generator.prf
@@ -88,11 +88,12 @@ GYP_CONTENTS += " ],"
GYP_CONTENTS += " ],"
}
-!isEmpty(DEFINES) {
- GYP_CONTENTS += " 'defines': ["
- for (define, DEFINES): GYP_CONTENTS += " '$$define',"
- GYP_CONTENTS += " ],"
-}
+GYP_CONTENTS += " 'defines': ["
+for (define, DEFINES): GYP_CONTENTS += " '$$define',"
+!isEmpty(QMAKE_LIBDIR_EGL): GYP_CONTENTS += " 'QT_LIBDIR_EGL=\"$${QMAKE_DIR_SEP}$$relative_path($$QMAKE_LIBDIR_EGL, $$[QT_SYSROOT])\"',"
+!isEmpty(QMAKE_LIBDIR_OPENGL_ES2): GYP_CONTENTS += " 'QT_LIBDIR_GLES2=\"$${QMAKE_DIR_SEP}$$relative_path($$QMAKE_LIBDIR_OPENGL_ES2, $$[QT_SYSROOT])\"',"
+GYP_CONTENTS += " ],"
+
!isEmpty(GYP_DYLIB_INSTALL_NAME_BASE) {
GYP_CONTENTS += " 'xcode_settings': {" \
" 'DYLIB_INSTALL_NAME_BASE': '$$GYP_DYLIB_INSTALL_NAME_BASE'," \