diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-04-27 13:12:23 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-04-27 17:36:35 +0300 |
commit | 72bcad210ddc9ad8e2ca8e7e53e134b5d9c06cdf (patch) | |
tree | 5cc14f5ea4aa87e56c1a793f2285df2b1def325e | |
parent | 205ecff6d7e3b4b89f98c303e5faa807037dc587 (diff) | |
download | qtlocation-mapboxgl-72bcad210ddc9ad8e2ca8e7e53e134b5d9c06cdf.tar.gz |
[Qt] Added QQuickMapboxGL{,Renderer}
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | platform/qt/include/QQuickMapboxGL | 1 | ||||
-rw-r--r-- | platform/qt/include/qquickmapboxgl.hpp | 20 | ||||
-rw-r--r-- | platform/qt/platform.gyp | 16 | ||||
-rw-r--r-- | platform/qt/scripts/configure.sh | 8 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxgl.cpp | 19 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxglrenderer.cpp | 46 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxglrenderer.hpp | 28 | ||||
-rw-r--r-- | scripts/main.mk | 3 |
9 files changed, 142 insertions, 1 deletions
diff --git a/.travis.yml b/.travis.yml index 1e32e3a7b5..0e54ebcfa7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ addons_shortcuts: addons_qt5: &qt5 apt: sources: [ 'ubuntu-toolchain-r-test' ] - packages: [ 'gdb', 'g++-4.9', 'gcc-4.9', 'mesa-utils', 'qt5-default', 'libqt5opengl5-dev' ] + packages: [ 'gdb', 'g++-4.9', 'gcc-4.9', 'mesa-utils', 'qt5-default', 'libqt5opengl5-dev', 'qtdeclarative5-dev' ] env: global: diff --git a/platform/qt/include/QQuickMapboxGL b/platform/qt/include/QQuickMapboxGL new file mode 100644 index 0000000000..db109a1d3a --- /dev/null +++ b/platform/qt/include/QQuickMapboxGL @@ -0,0 +1 @@ +#include "qquickmapboxgl.hpp" diff --git a/platform/qt/include/qquickmapboxgl.hpp b/platform/qt/include/qquickmapboxgl.hpp new file mode 100644 index 0000000000..8dfec6b369 --- /dev/null +++ b/platform/qt/include/qquickmapboxgl.hpp @@ -0,0 +1,20 @@ +#ifndef QQUICKMAPBOXGL_H +#define QQUICKMAPBOXGL_H + +#include <QQuickFramebufferObject> + +class QQuickItem; + +class Q_DECL_EXPORT QQuickMapboxGL : public QQuickFramebufferObject +{ + Q_OBJECT + +public: + QQuickMapboxGL(QQuickItem *parent = 0); + virtual ~QQuickMapboxGL(); + + // Called from render thread. + virtual Renderer *createRenderer() const Q_DECL_FINAL; +}; + +#endif // QQUICKMAPBOXGL_H diff --git a/platform/qt/platform.gyp b/platform/qt/platform.gyp index d93d4c4e9b..dcf9169551 100644 --- a/platform/qt/platform.gyp +++ b/platform/qt/platform.gyp @@ -46,6 +46,7 @@ '../default/webp_reader.cpp', 'include/qmapbox.hpp', 'include/qmapboxgl.hpp', + 'include/qquickmapboxgl.hpp', 'qmapbox.qrc', 'src/async_task.cpp', 'src/async_task_impl.hpp', @@ -57,6 +58,9 @@ 'src/qmapbox.cpp', 'src/qmapboxgl.cpp', 'src/qmapboxgl_p.hpp', + 'src/qquickmapboxgl.cpp', + 'src/qquickmapboxglrenderer.cpp', + 'src/qquickmapboxglrenderer.hpp', 'src/run_loop.cpp', 'src/run_loop_impl.hpp', 'src/timer.cpp', @@ -106,6 +110,18 @@ ], 'conditions': [ + ['qt_version == 5', { + 'variables': { + 'cflags': [ + '<@(qt_quick_cflags)', + ], + 'ldflags': [ + '<@(qt_quick_ldflags)', + ], + }, + }, { + 'sources/': [ [ 'exclude', 'qquick*' ] ], + }], ['OS == "mac"', { 'xcode_settings': { 'OTHER_CPLUSPLUSFLAGS': [ '<@(cflags)' ], diff --git a/platform/qt/scripts/configure.sh b/platform/qt/scripts/configure.sh index 321a0ffa66..08f06508e3 100644 --- a/platform/qt/scripts/configure.sh +++ b/platform/qt/scripts/configure.sh @@ -42,6 +42,14 @@ function print_qt_flags { CONFIG+=" 'qt_network_ldflags%': $(quote_flags $(mason ldflags Qt system "QtNetwork")),"$LN QT_VERSION_MAJOR=$(qmake -query QT_VERSION | cut -d. -f1) + if [ ${QT_VERSION_MAJOR} -gt 4 ]; then + CONFIG+=" 'qt_qml_cflags%': $(quote_flags $(mason cflags Qt system "QtQml")), "$LN + CONFIG+=" 'qt_quick_cflags%': $(quote_flags $(mason cflags Qt system "QtQuick")), "$LN + + CONFIG+=" 'qt_qml_ldflags%': $(quote_flags $(mason ldflags Qt system "QtQml")), "$LN + CONFIG+=" 'qt_quick_ldflags%': $(quote_flags $(mason ldflags Qt system "QtQuick")), "$LN + fi + if hash moc 2>/dev/null && hash rcc 2>/dev/null; then CONFIG+=" 'qt_moc%': '$(which moc)',"$LN CONFIG+=" 'qt_rcc%': '$(which rcc)',"$LN diff --git a/platform/qt/src/qquickmapboxgl.cpp b/platform/qt/src/qquickmapboxgl.cpp new file mode 100644 index 0000000000..2a8bdffccf --- /dev/null +++ b/platform/qt/src/qquickmapboxgl.cpp @@ -0,0 +1,19 @@ +#include "qquickmapboxglrenderer.hpp" + +#include <QQuickMapboxGL> + +#include <QQuickItem> + +QQuickMapboxGL::QQuickMapboxGL(QQuickItem *parent_) + : QQuickFramebufferObject(parent_) +{ +} + +QQuickMapboxGL::~QQuickMapboxGL() +{ +} + +QQuickFramebufferObject::Renderer *QQuickMapboxGL::createRenderer() const +{ + return new QQuickMapboxGLRenderer(); +} diff --git a/platform/qt/src/qquickmapboxglrenderer.cpp b/platform/qt/src/qquickmapboxglrenderer.cpp new file mode 100644 index 0000000000..5871e05536 --- /dev/null +++ b/platform/qt/src/qquickmapboxglrenderer.cpp @@ -0,0 +1,46 @@ +#include "qquickmapboxglrenderer.hpp" + +#include <QMapboxGL> + +#include <QSize> +#include <QOpenGLFramebufferObject> +#include <QOpenGLFramebufferObjectFormat> +#include <QQuickWindow> + +QQuickMapboxGLRenderer::QQuickMapboxGLRenderer() +{ + QMapboxGLSettings settings; + settings.setAccessToken(qgetenv("MAPBOX_ACCESS_TOKEN")); + settings.setCacheDatabasePath("/tmp/mbgl-cache.db"); + settings.setCacheDatabaseMaximumSize(20 * 1024 * 1024); + + m_map.reset(new QMapboxGL(nullptr, settings)); +} + +QQuickMapboxGLRenderer::~QQuickMapboxGLRenderer() +{ +} + +QOpenGLFramebufferObject* QQuickMapboxGLRenderer::createFramebufferObject(const QSize &size) +{ + m_map->resize(size); + + QOpenGLFramebufferObjectFormat format; + format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); + + return new QOpenGLFramebufferObject(size, format); +} + +void QQuickMapboxGLRenderer::render() +{ + m_map->render(); +} + +void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item) +{ + if (!m_initialized) { + m_map->setStyleURL(QMapbox::defaultStyles()[0].first); + QObject::connect(m_map.data(), SIGNAL(needsRendering()), item, SLOT(update())); + m_initialized = true; + } +} diff --git a/platform/qt/src/qquickmapboxglrenderer.hpp b/platform/qt/src/qquickmapboxglrenderer.hpp new file mode 100644 index 0000000000..a30afc243c --- /dev/null +++ b/platform/qt/src/qquickmapboxglrenderer.hpp @@ -0,0 +1,28 @@ +#ifndef QQUICKMAPBOXGLRENDERER_H +#define QQUICKMAPBOXGLRENDERER_H + +#include <QScopedPointer> +#include <QQuickFramebufferObject> + +class QOpenGLFramebufferObject; +class QSize; +class QMapboxGL; + +class QQuickMapboxGLRenderer : public QQuickFramebufferObject::Renderer +{ +public: + QQuickMapboxGLRenderer(); + virtual ~QQuickMapboxGLRenderer(); + + virtual QOpenGLFramebufferObject* createFramebufferObject(const QSize& size); + + virtual void render(); + virtual void synchronize(QQuickFramebufferObject *item); + +private: + bool m_initialized = false; + + QScopedPointer<QMapboxGL> m_map; +}; + +#endif // QQUICKMAPBOXGLRENDERER_H diff --git a/scripts/main.mk b/scripts/main.mk index 466ffff219..aa1ce2b0c4 100644 --- a/scripts/main.mk +++ b/scripts/main.mk @@ -89,6 +89,9 @@ $(PLATFORM_CONFIG_OUTPUT): .mason configure $(PLATFORM_CONFIG_INPUT) GYP_FLAGS += -I$(PLATFORM_CONFIG_OUTPUT) GYP_FLAGS += -Dcoverage=$(ENABLE_COVERAGE) GYP_FLAGS += -Dcxx_host=$(CXX_HOST) +ifeq ($(PLATFORM),qt) + GYP_FLAGS += -Dqt_version=$(shell qmake -query QT_VERSION | cut -d. -f1) +endif GYP_FLAGS += -Goutput_dir=. GYP_FLAGS += --depth=. GYP_FLAGS += --generator-output=$(PLATFORM_OUTPUT) |