diff options
-rw-r--r-- | src/core/core_gyp_generator.pro | 9 | ||||
-rw-r--r-- | src/core/ozone_platform_eglfs.cpp | 67 | ||||
-rw-r--r-- | src/core/ozone_platform_eglfs.h | 76 | ||||
-rw-r--r-- | src/core/qtwebengine_extras.gypi | 3 | ||||
-rw-r--r-- | src/core/surface_factory_qt.cpp | 107 | ||||
-rw-r--r-- | src/core/surface_factory_qt.h | 67 | ||||
-rw-r--r-- | tools/qmake/mkspecs/features/gyp_generator.prf | 11 |
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'," \ |