From cd92a231b3e11c65321a48d0167898bb0e5a5fa8 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Mon, 12 Nov 2018 16:38:34 +0200 Subject: [PATCH] [qt] Deprecate Qt4 and old versions of Qt5 Not enough adoption to keep the platform alive. --- Makefile | 11 +- circle.yml | 25 -- platform/qt/app/mapwindow.cpp | 29 -- platform/qt/app/mapwindow.hpp | 13 +- platform/qt/mbgl/gl/gl_impl.hpp | 324 ++++++++---------- platform/qt/qt.cmake | 42 ++- platform/qt/qt5.cmake | 26 -- platform/qt/src/headless_backend_qt.cpp | 10 - platform/qt/src/http_file_source.cpp | 14 - platform/qt/src/qmapbox.cpp | 4 - platform/qt/src/qmapboxgl.cpp | 17 - .../qt/src/qmapboxgl_renderer_backend.cpp | 12 +- platform/qt/src/qt_conversion.hpp | 8 - platform/qt/src/qt_geojson.cpp | 8 - platform/qt/src/qt_image.cpp | 5 - platform/qt/src/sqlite3.cpp | 8 - platform/qt/src/timer.cpp | 2 - platform/qt/test/qmapboxgl.test.cpp | 5 - platform/qt/test/qmapboxgl.test.hpp | 5 - .../offline_database/offline_sideload.db | Bin 73728 -> 4096 bytes 20 files changed, 181 insertions(+), 387 deletions(-) delete mode 100644 platform/qt/qt5.cmake diff --git a/Makefile b/Makefile index 0ea3dfdb9..a2916e636 100644 --- a/Makefile +++ b/Makefile @@ -385,13 +385,7 @@ endif QT_QMAKE_FOUND := $(shell command -v qmake 2> /dev/null) ifdef QT_QMAKE_FOUND export QT_INSTALL_DOCS = $(shell qmake -query QT_INSTALL_DOCS) - ifeq ($(shell qmake -query QT_VERSION | head -c1), 4) - QT_ROOT_PATH = build/qt4-$(BUILD_PLATFORM)-$(BUILD_PLATFORM_VERSION) - WITH_QT_4=1 - else - QT_ROOT_PATH = build/qt-$(BUILD_PLATFORM)-$(BUILD_PLATFORM_VERSION) - WITH_QT_4=0 - endif + QT_ROOT_PATH = build/qt-$(BUILD_PLATFORM)-$(BUILD_PLATFORM_VERSION) endif export QT_OUTPUT_PATH = $(QT_ROOT_PATH)/$(BUILDTYPE) @@ -408,7 +402,6 @@ $(QT_BUILD): $(BUILD_DEPS) -DMASON_PLATFORM_VERSION=$(MASON_PLATFORM_VERSION) \ -DWITH_QT_DECODERS=${WITH_QT_DECODERS} \ -DWITH_QT_I18N=${WITH_QT_I18N} \ - -DWITH_QT_4=${WITH_QT_4} \ -DWITH_CXX11ABI=${WITH_CXX11ABI} \ -DWITH_COVERAGE=${WITH_COVERAGE}) @@ -424,7 +417,6 @@ $(MACOS_QT_PROJ_PATH): $(BUILD_DEPS) -DMASON_PLATFORM_VERSION=$(MASON_PLATFORM_VERSION) \ -DWITH_QT_DECODERS=${WITH_QT_DECODERS} \ -DWITH_QT_I18N=${WITH_QT_I18N} \ - -DWITH_QT_4=${WITH_QT_4} \ -DWITH_CXX11ABI=${WITH_CXX11ABI} \ -DWITH_COVERAGE=${WITH_COVERAGE}) @@ -453,7 +445,6 @@ $(QNX_QT_BUILD): $(BUILD_DEPS) -DMBGL_PLATFORM=qt \ -DWITH_QT_DECODERS=${WITH_QT_DECODERS} \ -DWITH_QT_I18N=${WITH_QT_I18N} \ - -DWITH_QT_4=${WITH_QT_4} \ -DWITH_CXX11ABI=${WITH_CXX11ABI} \ -DWITH_COVERAGE=${WITH_COVERAGE}) diff --git a/circle.yml b/circle.yml index 0d657517c..61cc914c2 100644 --- a/circle.yml +++ b/circle.yml @@ -48,7 +48,6 @@ workflows: branches: ignore: /.*/ - macos-debug - - qt4-linux-gcc5-release - qt5-linux-gcc5-release - qt5-macos-debug nightly: @@ -1004,30 +1003,6 @@ jobs: - collect-xcode-build-logs - upload-xcode-build-logs -# ------------------------------------------------------------------------------ - qt4-linux-gcc5-release: - docker: - - image: mbgl/7d2403f42e:linux-gcc-5-qt-4 - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 2 - JOBS: 2 - BUILDTYPE: Release - GTEST_OUTPUT: xml - LD_PRELOAD: /usr/lib/x86_64-linux-gnu/libjemalloc.so - steps: - - install-dependencies - - build-qt-app - - build-qt-test - - save-dependencies - - run: - name: Run memory-load tests - command: | - xvfb-run --server-args="-screen 0 1024x768x24" \ - make run-qt-test-Memory.*:*.Load - scripts/log_memory_benchmarks.sh test_detail.xml "Platform=Linux,Compiler=${_CC},Arch=$(uname -m)" - # ------------------------------------------------------------------------------ qt5-linux-gcc5-release: docker: diff --git a/platform/qt/app/mapwindow.cpp b/platform/qt/app/mapwindow.cpp index 536731929..551af4630 100644 --- a/platform/qt/app/mapwindow.cpp +++ b/platform/qt/app/mapwindow.cpp @@ -9,13 +9,8 @@ #include #include -#if QT_VERSION >= 0x050000 -#include -#endif - int kAnimationDuration = 10000; - MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_settings(settings) { @@ -45,13 +40,7 @@ void MapWindow::selfTest() } qreal MapWindow::pixelRatio() { -#if QT_VERSION >= 0x050600 return devicePixelRatioF(); -#elif QT_VERSION >= 0x050000 - return devicePixelRatio(); -#else - return 1; -#endif } @@ -369,11 +358,7 @@ void MapWindow::keyPressEvent(QKeyEvent *ev) void MapWindow::mousePressEvent(QMouseEvent *ev) { -#if QT_VERSION < 0x050000 - m_lastPos = ev->posF(); -#else m_lastPos = ev->localPos(); -#endif if (ev->type() == QEvent::MouseButtonPress) { if (ev->buttons() == (Qt::LeftButton | Qt::RightButton)) { @@ -394,11 +379,7 @@ void MapWindow::mousePressEvent(QMouseEvent *ev) void MapWindow::mouseMoveEvent(QMouseEvent *ev) { -#if QT_VERSION < 0x050000 - QPointF delta = ev->posF() - m_lastPos; -#else QPointF delta = ev->localPos() - m_lastPos; -#endif if (!delta.isNull()) { if (ev->buttons() == Qt::LeftButton && ev->modifiers() & Qt::ShiftModifier) { @@ -406,19 +387,11 @@ void MapWindow::mouseMoveEvent(QMouseEvent *ev) } else if (ev->buttons() == Qt::LeftButton) { m_map->moveBy(delta); } else if (ev->buttons() == Qt::RightButton) { -#if QT_VERSION < 0x050000 - m_map->rotateBy(m_lastPos, ev->posF()); -#else m_map->rotateBy(m_lastPos, ev->localPos()); -#endif } } -#if QT_VERSION < 0x050000 - m_lastPos = ev->posF(); -#else m_lastPos = ev->localPos(); -#endif ev->accept(); } @@ -464,8 +437,6 @@ void MapWindow::paintGL() { m_frameDraws++; m_map->resize(size()); -#if QT_VERSION >= 0x050400 m_map->setFramebufferObject(defaultFramebufferObject(), size() * pixelRatio()); -#endif m_map->render(); } diff --git a/platform/qt/app/mapwindow.hpp b/platform/qt/app/mapwindow.hpp index 6c05f0356..0671c4251 100644 --- a/platform/qt/app/mapwindow.hpp +++ b/platform/qt/app/mapwindow.hpp @@ -3,27 +3,16 @@ #include -#include - -// XXX http://stackoverflow.com/questions/24899558/how-to-check-qt-version-to-include-different-header#comment59591604_29887388 -#if QT_VERSION >= 0x050400 #include -#else -#include -#endif // QT_VERSION - #include #include +#include class QKeyEvent; class QMouseEvent; class QWheelEvent; -#if QT_VERSION >= 0x050400 class MapWindow : public QOpenGLWidget -#else -class MapWindow : public QGLWidget -#endif // QT_VERSION { Q_OBJECT diff --git a/platform/qt/mbgl/gl/gl_impl.hpp b/platform/qt/mbgl/gl/gl_impl.hpp index b08efe1ee..a3c69214c 100644 --- a/platform/qt/mbgl/gl/gl_impl.hpp +++ b/platform/qt/mbgl/gl/gl_impl.hpp @@ -2,177 +2,157 @@ #include -// Qt4 -#if QT_VERSION < 0x050000 - #if __APPLE__ - #include "TargetConditionals.h" - #include - #include - #include - #elif MBGL_USE_GLES2 - #define GL_GLEXT_PROTOTYPES - #include - #include - #else - #define GL_GLEXT_PROTOTYPES - #include - #include - #endif +#include +#include -// Qt5 -#else - #include - #include - - #ifndef GL_RGBA8_OES - #define GL_RGBA8_OES GL_RGBA8 - #endif - - #ifndef GL_DEPTH24_STENCIL8_OES - #define GL_DEPTH24_STENCIL8_OES GL_DEPTH24_STENCIL8 - #endif - - #define glActiveTexture(...) QOpenGLContext::currentContext()->functions()->glActiveTexture(__VA_ARGS__) - #define glAttachShader(...) QOpenGLContext::currentContext()->functions()->glAttachShader(__VA_ARGS__) - #define glBindAttribLocation(...) QOpenGLContext::currentContext()->functions()->glBindAttribLocation(__VA_ARGS__) - #define glBindBuffer(...) QOpenGLContext::currentContext()->functions()->glBindBuffer(__VA_ARGS__) - #define glBindFramebuffer(...) QOpenGLContext::currentContext()->functions()->glBindFramebuffer(__VA_ARGS__) - #define glBindRenderbuffer(...) QOpenGLContext::currentContext()->functions()->glBindRenderbuffer(__VA_ARGS__) - #define glBindTexture(...) QOpenGLContext::currentContext()->functions()->glBindTexture(__VA_ARGS__) - #define glBlendColor(...) QOpenGLContext::currentContext()->functions()->glBlendColor(__VA_ARGS__) - #define glBlendEquation(...) QOpenGLContext::currentContext()->functions()->glBlendEquation(__VA_ARGS__) - #define glBlendEquationSeparate(...) QOpenGLContext::currentContext()->functions()->glBlendEquationSeparate(__VA_ARGS__) - #define glBlendFunc(...) QOpenGLContext::currentContext()->functions()->glBlendFunc(__VA_ARGS__) - #define glBlendFuncSeparate(...) QOpenGLContext::currentContext()->functions()->glBlendFuncSeparate(__VA_ARGS__) - #define glBufferData(...) QOpenGLContext::currentContext()->functions()->glBufferData(__VA_ARGS__) - #define glBufferSubData(...) QOpenGLContext::currentContext()->functions()->glBufferSubData(__VA_ARGS__) - #define glCheckFramebufferStatus(...) QOpenGLContext::currentContext()->functions()->glCheckFramebufferStatus(__VA_ARGS__) - #define glClear(...) QOpenGLContext::currentContext()->functions()->glClear(__VA_ARGS__) - #define glClearColor(...) QOpenGLContext::currentContext()->functions()->glClearColor(__VA_ARGS__) - #define glClearDepthf(...) QOpenGLContext::currentContext()->functions()->glClearDepthf(__VA_ARGS__) - #define glClearStencil(...) QOpenGLContext::currentContext()->functions()->glClearStencil(__VA_ARGS__) - #define glColorMask(...) QOpenGLContext::currentContext()->functions()->glColorMask(__VA_ARGS__) - #define glCompileShader(...) QOpenGLContext::currentContext()->functions()->glCompileShader(__VA_ARGS__) - #define glCompressedTexImage2D(...) QOpenGLContext::currentContext()->functions()->glCompressedTexImage2D(__VA_ARGS__) - #define glCompressedTexSubImage2D(...) QOpenGLContext::currentContext()->functions()->glCompressedTexSubImage2D(__VA_ARGS__) - #define glCopyTexImage2D(...) QOpenGLContext::currentContext()->functions()->glCopyTexImage2D(__VA_ARGS__) - #define glCopyTexSubImage2D(...) QOpenGLContext::currentContext()->functions()->glCopyTexSubImage2D(__VA_ARGS__) - #define glCreateProgram(...) QOpenGLContext::currentContext()->functions()->glCreateProgram(__VA_ARGS__) - #define glCreateShader(...) QOpenGLContext::currentContext()->functions()->glCreateShader(__VA_ARGS__) - #define glCullFace(...) QOpenGLContext::currentContext()->functions()->glCullFace(__VA_ARGS__) - #define glDeleteBuffers(...) QOpenGLContext::currentContext()->functions()->glDeleteBuffers(__VA_ARGS__) - #define glDeleteFramebuffers(...) QOpenGLContext::currentContext()->functions()->glDeleteFramebuffers(__VA_ARGS__) - #define glDeleteProgram(...) QOpenGLContext::currentContext()->functions()->glDeleteProgram(__VA_ARGS__) - #define glDeleteRenderbuffers(...) QOpenGLContext::currentContext()->functions()->glDeleteRenderbuffers(__VA_ARGS__) - #define glDeleteShader(...) QOpenGLContext::currentContext()->functions()->glDeleteShader(__VA_ARGS__) - #define glDeleteTextures(...) QOpenGLContext::currentContext()->functions()->glDeleteTextures(__VA_ARGS__) - #define glDepthFunc(...) QOpenGLContext::currentContext()->functions()->glDepthFunc(__VA_ARGS__) - #define glDepthMask(...) QOpenGLContext::currentContext()->functions()->glDepthMask(__VA_ARGS__) - #define glDepthRangef(...) QOpenGLContext::currentContext()->functions()->glDepthRangef(__VA_ARGS__) - #define glDetachShader(...) QOpenGLContext::currentContext()->functions()->glDetachShader(__VA_ARGS__) - #define glDisable(...) QOpenGLContext::currentContext()->functions()->glDisable(__VA_ARGS__) - #define glDisableVertexAttribArray(...) QOpenGLContext::currentContext()->functions()->glDisableVertexAttribArray(__VA_ARGS__) - #define glDrawArrays(...) QOpenGLContext::currentContext()->functions()->glDrawArrays(__VA_ARGS__) - #define glDrawElements(...) QOpenGLContext::currentContext()->functions()->glDrawElements(__VA_ARGS__) - #define glEnable(...) QOpenGLContext::currentContext()->functions()->glEnable(__VA_ARGS__) - #define glEnableVertexAttribArray(...) QOpenGLContext::currentContext()->functions()->glEnableVertexAttribArray(__VA_ARGS__) - #define glFinish(...) QOpenGLContext::currentContext()->functions()->glFinish(__VA_ARGS__) - #define glFlush(...) QOpenGLContext::currentContext()->functions()->glFlush(__VA_ARGS__) - #define glFramebufferRenderbuffer(...) QOpenGLContext::currentContext()->functions()->glFramebufferRenderbuffer(__VA_ARGS__) - #define glFramebufferTexture2D(...) QOpenGLContext::currentContext()->functions()->glFramebufferTexture2D(__VA_ARGS__) - #define glFrontFace(...) QOpenGLContext::currentContext()->functions()->glFrontFace(__VA_ARGS__) - #define glGenBuffers(...) QOpenGLContext::currentContext()->functions()->glGenBuffers(__VA_ARGS__) - #define glGenerateMipmap(...) QOpenGLContext::currentContext()->functions()->glGenerateMipmap(__VA_ARGS__) - #define glGenFramebuffers(...) QOpenGLContext::currentContext()->functions()->glGenFramebuffers(__VA_ARGS__) - #define glGenRenderbuffers(...) QOpenGLContext::currentContext()->functions()->glGenRenderbuffers(__VA_ARGS__) - #define glGenTextures(...) QOpenGLContext::currentContext()->functions()->glGenTextures(__VA_ARGS__) - #define glGetActiveAttrib(...) QOpenGLContext::currentContext()->functions()->glGetActiveAttrib(__VA_ARGS__) - #define glGetActiveUniform(...) QOpenGLContext::currentContext()->functions()->glGetActiveUniform(__VA_ARGS__) - #define glGetAttachedShaders(...) QOpenGLContext::currentContext()->functions()->glGetAttachedShaders(__VA_ARGS__) - #define glGetAttribLocation(...) QOpenGLContext::currentContext()->functions()->glGetAttribLocation(__VA_ARGS__) - #define glGetBooleanv(...) QOpenGLContext::currentContext()->functions()->glGetBooleanv(__VA_ARGS__) - #define glGetBufferParameteriv(...) QOpenGLContext::currentContext()->functions()->glGetBufferParameteriv(__VA_ARGS__) - #define glGetError(...) QOpenGLContext::currentContext()->functions()->glGetError(__VA_ARGS__) - #define glGetFloatv(...) QOpenGLContext::currentContext()->functions()->glGetFloatv(__VA_ARGS__) - #define glGetFramebufferAttachmentParameteriv(...) QOpenGLContext::currentContext()->functions()->glGetFramebufferAttachmentParameteriv(__VA_ARGS__) - #define glGetIntegerv(...) QOpenGLContext::currentContext()->functions()->glGetIntegerv(__VA_ARGS__) - #define glGetProgramInfoLog(...) QOpenGLContext::currentContext()->functions()->glGetProgramInfoLog(__VA_ARGS__) - #define glGetProgramiv(...) QOpenGLContext::currentContext()->functions()->glGetProgramiv(__VA_ARGS__) - #define glGetRenderbufferParameteriv(...) QOpenGLContext::currentContext()->functions()->glGetRenderbufferParameteriv(__VA_ARGS__) - #define glGetShaderInfoLog(...) QOpenGLContext::currentContext()->functions()->glGetShaderInfoLog(__VA_ARGS__) - #define glGetShaderiv(...) QOpenGLContext::currentContext()->functions()->glGetShaderiv(__VA_ARGS__) - #define glGetShaderPrecisionFormat(...) QOpenGLContext::currentContext()->functions()->glGetShaderPrecisionFormat(__VA_ARGS__) - #define glGetShaderSource(...) QOpenGLContext::currentContext()->functions()->glGetShaderSource(__VA_ARGS__) - #define glGetString(...) QOpenGLContext::currentContext()->functions()->glGetString(__VA_ARGS__) - #define glGetTexParameterfv(...) QOpenGLContext::currentContext()->functions()->glGetTexParameterfv(__VA_ARGS__) - #define glGetTexParameteriv(...) QOpenGLContext::currentContext()->functions()->glGetTexParameteriv(__VA_ARGS__) - #define glGetUniformfv(...) QOpenGLContext::currentContext()->functions()->glGetUniformfv(__VA_ARGS__) - #define glGetUniformiv(...) QOpenGLContext::currentContext()->functions()->glGetUniformiv(__VA_ARGS__) - #define glGetUniformLocation(...) QOpenGLContext::currentContext()->functions()->glGetUniformLocation(__VA_ARGS__) - #define glGetVertexAttribfv(...) QOpenGLContext::currentContext()->functions()->glGetVertexAttribfv(__VA_ARGS__) - #define glGetVertexAttribiv(...) QOpenGLContext::currentContext()->functions()->glGetVertexAttribiv(__VA_ARGS__) - #define glGetVertexAttribPointerv(...) QOpenGLContext::currentContext()->functions()->glGetVertexAttribPointerv(__VA_ARGS__) - #define glHint(...) QOpenGLContext::currentContext()->functions()->glHint(__VA_ARGS__) - #define glIsBuffer(...) QOpenGLContext::currentContext()->functions()->glIsBuffer(__VA_ARGS__) - #define glIsEnabled(...) QOpenGLContext::currentContext()->functions()->glIsEnabled(__VA_ARGS__) - #define glIsFramebuffer(...) QOpenGLContext::currentContext()->functions()->glIsFramebuffer(__VA_ARGS__) - #define glIsProgram(...) QOpenGLContext::currentContext()->functions()->glIsProgram(__VA_ARGS__) - #define glIsRenderbuffer(...) QOpenGLContext::currentContext()->functions()->glIsRenderbuffer(__VA_ARGS__) - #define glIsShader(...) QOpenGLContext::currentContext()->functions()->glIsShader(__VA_ARGS__) - #define glIsTexture(...) QOpenGLContext::currentContext()->functions()->glIsTexture(__VA_ARGS__) - #define glLineWidth(...) QOpenGLContext::currentContext()->functions()->glLineWidth(__VA_ARGS__) - #define glLinkProgram(...) QOpenGLContext::currentContext()->functions()->glLinkProgram(__VA_ARGS__) - #define glPixelStorei(...) QOpenGLContext::currentContext()->functions()->glPixelStorei(__VA_ARGS__) - #define glPolygonOffset(...) QOpenGLContext::currentContext()->functions()->glPolygonOffset(__VA_ARGS__) - #define glReadPixels(...) QOpenGLContext::currentContext()->functions()->glReadPixels(__VA_ARGS__) - #define glReleaseShaderCompiler(...) QOpenGLContext::currentContext()->functions()->glReleaseShaderCompiler(__VA_ARGS__) - #define glRenderbufferStorage(...) QOpenGLContext::currentContext()->functions()->glRenderbufferStorage(__VA_ARGS__) - #define glSampleCoverage(...) QOpenGLContext::currentContext()->functions()->glSampleCoverage(__VA_ARGS__) - #define glScissor(...) QOpenGLContext::currentContext()->functions()->glScissor(__VA_ARGS__) - #define glShaderBinary(...) QOpenGLContext::currentContext()->functions()->glShaderBinary(__VA_ARGS__) - #define glShaderSource(...) QOpenGLContext::currentContext()->functions()->glShaderSource(__VA_ARGS__) - #define glStencilFunc(...) QOpenGLContext::currentContext()->functions()->glStencilFunc(__VA_ARGS__) - #define glStencilFuncSeparate(...) QOpenGLContext::currentContext()->functions()->glStencilFuncSeparate(__VA_ARGS__) - #define glStencilMask(...) QOpenGLContext::currentContext()->functions()->glStencilMask(__VA_ARGS__) - #define glStencilMaskSeparate(...) QOpenGLContext::currentContext()->functions()->glStencilMaskSeparate(__VA_ARGS__) - #define glStencilOp(...) QOpenGLContext::currentContext()->functions()->glStencilOp(__VA_ARGS__) - #define glStencilOpSeparate(...) QOpenGLContext::currentContext()->functions()->glStencilOpSeparate(__VA_ARGS__) - #define glTexImage2D(...) QOpenGLContext::currentContext()->functions()->glTexImage2D(__VA_ARGS__) - #define glTexLevelParameteriv(...) QOpenGLContext::currentContext()->functions()->glTexLevelParameteriv(__VA_ARGS__) - #define glTexParameterf(...) QOpenGLContext::currentContext()->functions()->glTexParameterf(__VA_ARGS__) - #define glTexParameterfv(...) QOpenGLContext::currentContext()->functions()->glTexParameterfv(__VA_ARGS__) - #define glTexParameteri(...) QOpenGLContext::currentContext()->functions()->glTexParameteri(__VA_ARGS__) - #define glTexParameteriv(...) QOpenGLContext::currentContext()->functions()->glTexParameteriv(__VA_ARGS__) - #define glTexSubImage2D(...) QOpenGLContext::currentContext()->functions()->glTexSubImage2D(__VA_ARGS__) - #define glUniform1f(...) QOpenGLContext::currentContext()->functions()->glUniform1f(__VA_ARGS__) - #define glUniform1fv(...) QOpenGLContext::currentContext()->functions()->glUniform1fv(__VA_ARGS__) - #define glUniform1i(...) QOpenGLContext::currentContext()->functions()->glUniform1i(__VA_ARGS__) - #define glUniform1iv(...) QOpenGLContext::currentContext()->functions()->glUniform1iv(__VA_ARGS__) - #define glUniform2f(...) QOpenGLContext::currentContext()->functions()->glUniform2f(__VA_ARGS__) - #define glUniform2fv(...) QOpenGLContext::currentContext()->functions()->glUniform2fv(__VA_ARGS__) - #define glUniform2i(...) QOpenGLContext::currentContext()->functions()->glUniform2i(__VA_ARGS__) - #define glUniform2iv(...) QOpenGLContext::currentContext()->functions()->glUniform2iv(__VA_ARGS__) - #define glUniform3f(...) QOpenGLContext::currentContext()->functions()->glUniform3f(__VA_ARGS__) - #define glUniform3fv(...) QOpenGLContext::currentContext()->functions()->glUniform3fv(__VA_ARGS__) - #define glUniform3i(...) QOpenGLContext::currentContext()->functions()->glUniform3i(__VA_ARGS__) - #define glUniform3iv(...) QOpenGLContext::currentContext()->functions()->glUniform3iv(__VA_ARGS__) - #define glUniform4f(...) QOpenGLContext::currentContext()->functions()->glUniform4f(__VA_ARGS__) - #define glUniform4fv(...) QOpenGLContext::currentContext()->functions()->glUniform4fv(__VA_ARGS__) - #define glUniform4i(...) QOpenGLContext::currentContext()->functions()->glUniform4i(__VA_ARGS__) - #define glUniform4iv(...) QOpenGLContext::currentContext()->functions()->glUniform4iv(__VA_ARGS__) - #define glUniformMatrix2fv(...) QOpenGLContext::currentContext()->functions()->glUniformMatrix2fv(__VA_ARGS__) - #define glUniformMatrix3fv(...) QOpenGLContext::currentContext()->functions()->glUniformMatrix3fv(__VA_ARGS__) - #define glUniformMatrix4fv(...) QOpenGLContext::currentContext()->functions()->glUniformMatrix4fv(__VA_ARGS__) - #define glUseProgram(...) QOpenGLContext::currentContext()->functions()->glUseProgram(__VA_ARGS__) - #define glValidateProgram(...) QOpenGLContext::currentContext()->functions()->glValidateProgram(__VA_ARGS__) - #define glVertexAttrib1f(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib1f(__VA_ARGS__) - #define glVertexAttrib1fv(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib1fv(__VA_ARGS__) - #define glVertexAttrib2f(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib2f(__VA_ARGS__) - #define glVertexAttrib2fv(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib2fv(__VA_ARGS__) - #define glVertexAttrib3f(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib3f(__VA_ARGS__) - #define glVertexAttrib3fv(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib3fv(__VA_ARGS__) - #define glVertexAttrib4f(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib4f(__VA_ARGS__) - #define glVertexAttrib4fv(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib4fv(__VA_ARGS__) - #define glVertexAttribPointer(...) QOpenGLContext::currentContext()->functions()->glVertexAttribPointer(__VA_ARGS__) - #define glViewport(...) QOpenGLContext::currentContext()->functions()->glViewport(__VA_ARGS__) +#ifndef GL_RGBA8_OES +#define GL_RGBA8_OES GL_RGBA8 #endif + +#ifndef GL_DEPTH24_STENCIL8_OES +#define GL_DEPTH24_STENCIL8_OES GL_DEPTH24_STENCIL8 +#endif + +#define glActiveTexture(...) QOpenGLContext::currentContext()->functions()->glActiveTexture(__VA_ARGS__) +#define glAttachShader(...) QOpenGLContext::currentContext()->functions()->glAttachShader(__VA_ARGS__) +#define glBindAttribLocation(...) QOpenGLContext::currentContext()->functions()->glBindAttribLocation(__VA_ARGS__) +#define glBindBuffer(...) QOpenGLContext::currentContext()->functions()->glBindBuffer(__VA_ARGS__) +#define glBindFramebuffer(...) QOpenGLContext::currentContext()->functions()->glBindFramebuffer(__VA_ARGS__) +#define glBindRenderbuffer(...) QOpenGLContext::currentContext()->functions()->glBindRenderbuffer(__VA_ARGS__) +#define glBindTexture(...) QOpenGLContext::currentContext()->functions()->glBindTexture(__VA_ARGS__) +#define glBlendColor(...) QOpenGLContext::currentContext()->functions()->glBlendColor(__VA_ARGS__) +#define glBlendEquation(...) QOpenGLContext::currentContext()->functions()->glBlendEquation(__VA_ARGS__) +#define glBlendEquationSeparate(...) QOpenGLContext::currentContext()->functions()->glBlendEquationSeparate(__VA_ARGS__) +#define glBlendFunc(...) QOpenGLContext::currentContext()->functions()->glBlendFunc(__VA_ARGS__) +#define glBlendFuncSeparate(...) QOpenGLContext::currentContext()->functions()->glBlendFuncSeparate(__VA_ARGS__) +#define glBufferData(...) QOpenGLContext::currentContext()->functions()->glBufferData(__VA_ARGS__) +#define glBufferSubData(...) QOpenGLContext::currentContext()->functions()->glBufferSubData(__VA_ARGS__) +#define glCheckFramebufferStatus(...) QOpenGLContext::currentContext()->functions()->glCheckFramebufferStatus(__VA_ARGS__) +#define glClear(...) QOpenGLContext::currentContext()->functions()->glClear(__VA_ARGS__) +#define glClearColor(...) QOpenGLContext::currentContext()->functions()->glClearColor(__VA_ARGS__) +#define glClearDepthf(...) QOpenGLContext::currentContext()->functions()->glClearDepthf(__VA_ARGS__) +#define glClearStencil(...) QOpenGLContext::currentContext()->functions()->glClearStencil(__VA_ARGS__) +#define glColorMask(...) QOpenGLContext::currentContext()->functions()->glColorMask(__VA_ARGS__) +#define glCompileShader(...) QOpenGLContext::currentContext()->functions()->glCompileShader(__VA_ARGS__) +#define glCompressedTexImage2D(...) QOpenGLContext::currentContext()->functions()->glCompressedTexImage2D(__VA_ARGS__) +#define glCompressedTexSubImage2D(...) QOpenGLContext::currentContext()->functions()->glCompressedTexSubImage2D(__VA_ARGS__) +#define glCopyTexImage2D(...) QOpenGLContext::currentContext()->functions()->glCopyTexImage2D(__VA_ARGS__) +#define glCopyTexSubImage2D(...) QOpenGLContext::currentContext()->functions()->glCopyTexSubImage2D(__VA_ARGS__) +#define glCreateProgram(...) QOpenGLContext::currentContext()->functions()->glCreateProgram(__VA_ARGS__) +#define glCreateShader(...) QOpenGLContext::currentContext()->functions()->glCreateShader(__VA_ARGS__) +#define glCullFace(...) QOpenGLContext::currentContext()->functions()->glCullFace(__VA_ARGS__) +#define glDeleteBuffers(...) QOpenGLContext::currentContext()->functions()->glDeleteBuffers(__VA_ARGS__) +#define glDeleteFramebuffers(...) QOpenGLContext::currentContext()->functions()->glDeleteFramebuffers(__VA_ARGS__) +#define glDeleteProgram(...) QOpenGLContext::currentContext()->functions()->glDeleteProgram(__VA_ARGS__) +#define glDeleteRenderbuffers(...) QOpenGLContext::currentContext()->functions()->glDeleteRenderbuffers(__VA_ARGS__) +#define glDeleteShader(...) QOpenGLContext::currentContext()->functions()->glDeleteShader(__VA_ARGS__) +#define glDeleteTextures(...) QOpenGLContext::currentContext()->functions()->glDeleteTextures(__VA_ARGS__) +#define glDepthFunc(...) QOpenGLContext::currentContext()->functions()->glDepthFunc(__VA_ARGS__) +#define glDepthMask(...) QOpenGLContext::currentContext()->functions()->glDepthMask(__VA_ARGS__) +#define glDepthRangef(...) QOpenGLContext::currentContext()->functions()->glDepthRangef(__VA_ARGS__) +#define glDetachShader(...) QOpenGLContext::currentContext()->functions()->glDetachShader(__VA_ARGS__) +#define glDisable(...) QOpenGLContext::currentContext()->functions()->glDisable(__VA_ARGS__) +#define glDisableVertexAttribArray(...) QOpenGLContext::currentContext()->functions()->glDisableVertexAttribArray(__VA_ARGS__) +#define glDrawArrays(...) QOpenGLContext::currentContext()->functions()->glDrawArrays(__VA_ARGS__) +#define glDrawElements(...) QOpenGLContext::currentContext()->functions()->glDrawElements(__VA_ARGS__) +#define glEnable(...) QOpenGLContext::currentContext()->functions()->glEnable(__VA_ARGS__) +#define glEnableVertexAttribArray(...) QOpenGLContext::currentContext()->functions()->glEnableVertexAttribArray(__VA_ARGS__) +#define glFinish(...) QOpenGLContext::currentContext()->functions()->glFinish(__VA_ARGS__) +#define glFlush(...) QOpenGLContext::currentContext()->functions()->glFlush(__VA_ARGS__) +#define glFramebufferRenderbuffer(...) QOpenGLContext::currentContext()->functions()->glFramebufferRenderbuffer(__VA_ARGS__) +#define glFramebufferTexture2D(...) QOpenGLContext::currentContext()->functions()->glFramebufferTexture2D(__VA_ARGS__) +#define glFrontFace(...) QOpenGLContext::currentContext()->functions()->glFrontFace(__VA_ARGS__) +#define glGenBuffers(...) QOpenGLContext::currentContext()->functions()->glGenBuffers(__VA_ARGS__) +#define glGenerateMipmap(...) QOpenGLContext::currentContext()->functions()->glGenerateMipmap(__VA_ARGS__) +#define glGenFramebuffers(...) QOpenGLContext::currentContext()->functions()->glGenFramebuffers(__VA_ARGS__) +#define glGenRenderbuffers(...) QOpenGLContext::currentContext()->functions()->glGenRenderbuffers(__VA_ARGS__) +#define glGenTextures(...) QOpenGLContext::currentContext()->functions()->glGenTextures(__VA_ARGS__) +#define glGetActiveAttrib(...) QOpenGLContext::currentContext()->functions()->glGetActiveAttrib(__VA_ARGS__) +#define glGetActiveUniform(...) QOpenGLContext::currentContext()->functions()->glGetActiveUniform(__VA_ARGS__) +#define glGetAttachedShaders(...) QOpenGLContext::currentContext()->functions()->glGetAttachedShaders(__VA_ARGS__) +#define glGetAttribLocation(...) QOpenGLContext::currentContext()->functions()->glGetAttribLocation(__VA_ARGS__) +#define glGetBooleanv(...) QOpenGLContext::currentContext()->functions()->glGetBooleanv(__VA_ARGS__) +#define glGetBufferParameteriv(...) QOpenGLContext::currentContext()->functions()->glGetBufferParameteriv(__VA_ARGS__) +#define glGetError(...) QOpenGLContext::currentContext()->functions()->glGetError(__VA_ARGS__) +#define glGetFloatv(...) QOpenGLContext::currentContext()->functions()->glGetFloatv(__VA_ARGS__) +#define glGetFramebufferAttachmentParameteriv(...) QOpenGLContext::currentContext()->functions()->glGetFramebufferAttachmentParameteriv(__VA_ARGS__) +#define glGetIntegerv(...) QOpenGLContext::currentContext()->functions()->glGetIntegerv(__VA_ARGS__) +#define glGetProgramInfoLog(...) QOpenGLContext::currentContext()->functions()->glGetProgramInfoLog(__VA_ARGS__) +#define glGetProgramiv(...) QOpenGLContext::currentContext()->functions()->glGetProgramiv(__VA_ARGS__) +#define glGetRenderbufferParameteriv(...) QOpenGLContext::currentContext()->functions()->glGetRenderbufferParameteriv(__VA_ARGS__) +#define glGetShaderInfoLog(...) QOpenGLContext::currentContext()->functions()->glGetShaderInfoLog(__VA_ARGS__) +#define glGetShaderiv(...) QOpenGLContext::currentContext()->functions()->glGetShaderiv(__VA_ARGS__) +#define glGetShaderPrecisionFormat(...) QOpenGLContext::currentContext()->functions()->glGetShaderPrecisionFormat(__VA_ARGS__) +#define glGetShaderSource(...) QOpenGLContext::currentContext()->functions()->glGetShaderSource(__VA_ARGS__) +#define glGetString(...) QOpenGLContext::currentContext()->functions()->glGetString(__VA_ARGS__) +#define glGetTexParameterfv(...) QOpenGLContext::currentContext()->functions()->glGetTexParameterfv(__VA_ARGS__) +#define glGetTexParameteriv(...) QOpenGLContext::currentContext()->functions()->glGetTexParameteriv(__VA_ARGS__) +#define glGetUniformfv(...) QOpenGLContext::currentContext()->functions()->glGetUniformfv(__VA_ARGS__) +#define glGetUniformiv(...) QOpenGLContext::currentContext()->functions()->glGetUniformiv(__VA_ARGS__) +#define glGetUniformLocation(...) QOpenGLContext::currentContext()->functions()->glGetUniformLocation(__VA_ARGS__) +#define glGetVertexAttribfv(...) QOpenGLContext::currentContext()->functions()->glGetVertexAttribfv(__VA_ARGS__) +#define glGetVertexAttribiv(...) QOpenGLContext::currentContext()->functions()->glGetVertexAttribiv(__VA_ARGS__) +#define glGetVertexAttribPointerv(...) QOpenGLContext::currentContext()->functions()->glGetVertexAttribPointerv(__VA_ARGS__) +#define glHint(...) QOpenGLContext::currentContext()->functions()->glHint(__VA_ARGS__) +#define glIsBuffer(...) QOpenGLContext::currentContext()->functions()->glIsBuffer(__VA_ARGS__) +#define glIsEnabled(...) QOpenGLContext::currentContext()->functions()->glIsEnabled(__VA_ARGS__) +#define glIsFramebuffer(...) QOpenGLContext::currentContext()->functions()->glIsFramebuffer(__VA_ARGS__) +#define glIsProgram(...) QOpenGLContext::currentContext()->functions()->glIsProgram(__VA_ARGS__) +#define glIsRenderbuffer(...) QOpenGLContext::currentContext()->functions()->glIsRenderbuffer(__VA_ARGS__) +#define glIsShader(...) QOpenGLContext::currentContext()->functions()->glIsShader(__VA_ARGS__) +#define glIsTexture(...) QOpenGLContext::currentContext()->functions()->glIsTexture(__VA_ARGS__) +#define glLineWidth(...) QOpenGLContext::currentContext()->functions()->glLineWidth(__VA_ARGS__) +#define glLinkProgram(...) QOpenGLContext::currentContext()->functions()->glLinkProgram(__VA_ARGS__) +#define glPixelStorei(...) QOpenGLContext::currentContext()->functions()->glPixelStorei(__VA_ARGS__) +#define glPolygonOffset(...) QOpenGLContext::currentContext()->functions()->glPolygonOffset(__VA_ARGS__) +#define glReadPixels(...) QOpenGLContext::currentContext()->functions()->glReadPixels(__VA_ARGS__) +#define glReleaseShaderCompiler(...) QOpenGLContext::currentContext()->functions()->glReleaseShaderCompiler(__VA_ARGS__) +#define glRenderbufferStorage(...) QOpenGLContext::currentContext()->functions()->glRenderbufferStorage(__VA_ARGS__) +#define glSampleCoverage(...) QOpenGLContext::currentContext()->functions()->glSampleCoverage(__VA_ARGS__) +#define glScissor(...) QOpenGLContext::currentContext()->functions()->glScissor(__VA_ARGS__) +#define glShaderBinary(...) QOpenGLContext::currentContext()->functions()->glShaderBinary(__VA_ARGS__) +#define glShaderSource(...) QOpenGLContext::currentContext()->functions()->glShaderSource(__VA_ARGS__) +#define glStencilFunc(...) QOpenGLContext::currentContext()->functions()->glStencilFunc(__VA_ARGS__) +#define glStencilFuncSeparate(...) QOpenGLContext::currentContext()->functions()->glStencilFuncSeparate(__VA_ARGS__) +#define glStencilMask(...) QOpenGLContext::currentContext()->functions()->glStencilMask(__VA_ARGS__) +#define glStencilMaskSeparate(...) QOpenGLContext::currentContext()->functions()->glStencilMaskSeparate(__VA_ARGS__) +#define glStencilOp(...) QOpenGLContext::currentContext()->functions()->glStencilOp(__VA_ARGS__) +#define glStencilOpSeparate(...) QOpenGLContext::currentContext()->functions()->glStencilOpSeparate(__VA_ARGS__) +#define glTexImage2D(...) QOpenGLContext::currentContext()->functions()->glTexImage2D(__VA_ARGS__) +#define glTexLevelParameteriv(...) QOpenGLContext::currentContext()->functions()->glTexLevelParameteriv(__VA_ARGS__) +#define glTexParameterf(...) QOpenGLContext::currentContext()->functions()->glTexParameterf(__VA_ARGS__) +#define glTexParameterfv(...) QOpenGLContext::currentContext()->functions()->glTexParameterfv(__VA_ARGS__) +#define glTexParameteri(...) QOpenGLContext::currentContext()->functions()->glTexParameteri(__VA_ARGS__) +#define glTexParameteriv(...) QOpenGLContext::currentContext()->functions()->glTexParameteriv(__VA_ARGS__) +#define glTexSubImage2D(...) QOpenGLContext::currentContext()->functions()->glTexSubImage2D(__VA_ARGS__) +#define glUniform1f(...) QOpenGLContext::currentContext()->functions()->glUniform1f(__VA_ARGS__) +#define glUniform1fv(...) QOpenGLContext::currentContext()->functions()->glUniform1fv(__VA_ARGS__) +#define glUniform1i(...) QOpenGLContext::currentContext()->functions()->glUniform1i(__VA_ARGS__) +#define glUniform1iv(...) QOpenGLContext::currentContext()->functions()->glUniform1iv(__VA_ARGS__) +#define glUniform2f(...) QOpenGLContext::currentContext()->functions()->glUniform2f(__VA_ARGS__) +#define glUniform2fv(...) QOpenGLContext::currentContext()->functions()->glUniform2fv(__VA_ARGS__) +#define glUniform2i(...) QOpenGLContext::currentContext()->functions()->glUniform2i(__VA_ARGS__) +#define glUniform2iv(...) QOpenGLContext::currentContext()->functions()->glUniform2iv(__VA_ARGS__) +#define glUniform3f(...) QOpenGLContext::currentContext()->functions()->glUniform3f(__VA_ARGS__) +#define glUniform3fv(...) QOpenGLContext::currentContext()->functions()->glUniform3fv(__VA_ARGS__) +#define glUniform3i(...) QOpenGLContext::currentContext()->functions()->glUniform3i(__VA_ARGS__) +#define glUniform3iv(...) QOpenGLContext::currentContext()->functions()->glUniform3iv(__VA_ARGS__) +#define glUniform4f(...) QOpenGLContext::currentContext()->functions()->glUniform4f(__VA_ARGS__) +#define glUniform4fv(...) QOpenGLContext::currentContext()->functions()->glUniform4fv(__VA_ARGS__) +#define glUniform4i(...) QOpenGLContext::currentContext()->functions()->glUniform4i(__VA_ARGS__) +#define glUniform4iv(...) QOpenGLContext::currentContext()->functions()->glUniform4iv(__VA_ARGS__) +#define glUniformMatrix2fv(...) QOpenGLContext::currentContext()->functions()->glUniformMatrix2fv(__VA_ARGS__) +#define glUniformMatrix3fv(...) QOpenGLContext::currentContext()->functions()->glUniformMatrix3fv(__VA_ARGS__) +#define glUniformMatrix4fv(...) QOpenGLContext::currentContext()->functions()->glUniformMatrix4fv(__VA_ARGS__) +#define glUseProgram(...) QOpenGLContext::currentContext()->functions()->glUseProgram(__VA_ARGS__) +#define glValidateProgram(...) QOpenGLContext::currentContext()->functions()->glValidateProgram(__VA_ARGS__) +#define glVertexAttrib1f(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib1f(__VA_ARGS__) +#define glVertexAttrib1fv(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib1fv(__VA_ARGS__) +#define glVertexAttrib2f(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib2f(__VA_ARGS__) +#define glVertexAttrib2fv(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib2fv(__VA_ARGS__) +#define glVertexAttrib3f(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib3f(__VA_ARGS__) +#define glVertexAttrib3fv(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib3fv(__VA_ARGS__) +#define glVertexAttrib4f(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib4f(__VA_ARGS__) +#define glVertexAttrib4fv(...) QOpenGLContext::currentContext()->functions()->glVertexAttrib4fv(__VA_ARGS__) +#define glVertexAttribPointer(...) QOpenGLContext::currentContext()->functions()->glVertexAttribPointer(__VA_ARGS__) +#define glViewport(...) QOpenGLContext::currentContext()->functions()->glViewport(__VA_ARGS__) diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake index e12e20708..2e334563e 100644 --- a/platform/qt/qt.cmake +++ b/platform/qt/qt.cmake @@ -3,7 +3,6 @@ option(WITH_QT_DECODERS "Use builtin Qt image decoders" OFF) option(WITH_QT_I18N "Use builtin Qt i18n support" OFF) -option(WITH_QT_4 "Use Qt4 instead of Qt5" OFF) add_definitions("-D__QT__") @@ -112,11 +111,32 @@ target_link_libraries(mbgl-qt PRIVATE qmapboxgl ) -if(WITH_QT_4) - include(platform/qt/qt4.cmake) -else() - include(platform/qt/qt5.cmake) -endif() +find_package(Qt5Core REQUIRED) +find_package(Qt5Gui REQUIRED) +find_package(Qt5Network REQUIRED) +find_package(Qt5OpenGL REQUIRED) +find_package(Qt5Widgets REQUIRED) +find_package(Qt5Sql REQUIRED) + +# Qt5 always build OpenGL ES2 which is the compatibility +# mode. Qt5 will take care of translating the desktop +# version of OpenGL to ES2. +add_definitions("-DMBGL_USE_GLES2") + +set(MBGL_QT_CORE_LIBRARIES + PUBLIC Qt5::Core + PUBLIC Qt5::Gui + PUBLIC Qt5::OpenGL +) + +set(MBGL_QT_FILESOURCE_LIBRARIES + PUBLIC Qt5::Network + PUBLIC Qt5::Sql +) + +target_link_libraries(mbgl-qt + PRIVATE Qt5::Widgets +) xcode_create_scheme(TARGET mbgl-qt) @@ -128,20 +148,10 @@ if (MASON_PLATFORM STREQUAL "osx" OR MASON_PLATFORM STREQUAL "ios") list(APPEND MBGL_QT_CORE_LIBRARIES PRIVATE "-framework Foundation" ) - if(WITH_QT_4) - list(APPEND MBGL_QT_CORE_LIBRARIES - PRIVATE "-framework OpenGL" - ) - endif() elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") list(APPEND MBGL_QT_CORE_FILES PRIVATE platform/default/thread.cpp ) - if(WITH_QT_4) - list(APPEND MBGL_QT_CORE_LIBRARIES - PRIVATE "-lGL" - ) - endif() elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") add_definitions("-DQT_COMPILING_QIMAGE_COMPAT_CPP") add_definitions("-DRAPIDJSON_HAS_CXX11_RVALUE_REFS") diff --git a/platform/qt/qt5.cmake b/platform/qt/qt5.cmake deleted file mode 100644 index d083c4507..000000000 --- a/platform/qt/qt5.cmake +++ /dev/null @@ -1,26 +0,0 @@ -find_package(Qt5Core REQUIRED) -find_package(Qt5Gui REQUIRED) -find_package(Qt5Network REQUIRED) -find_package(Qt5OpenGL REQUIRED) -find_package(Qt5Widgets REQUIRED) -find_package(Qt5Sql REQUIRED) - -# Qt5 always build OpenGL ES2 which is the compatibility -# mode. Qt5 will take care of translating the desktop -# version of OpenGL to ES2. -add_definitions("-DMBGL_USE_GLES2") - -set(MBGL_QT_CORE_LIBRARIES - PUBLIC Qt5::Core - PUBLIC Qt5::Gui - PUBLIC Qt5::OpenGL -) - -set(MBGL_QT_FILESOURCE_LIBRARIES - PUBLIC Qt5::Network - PUBLIC Qt5::Sql -) - -target_link_libraries(mbgl-qt - PRIVATE Qt5::Widgets -) diff --git a/platform/qt/src/headless_backend_qt.cpp b/platform/qt/src/headless_backend_qt.cpp index ad3fa4229..3702fdf14 100644 --- a/platform/qt/src/headless_backend_qt.cpp +++ b/platform/qt/src/headless_backend_qt.cpp @@ -1,12 +1,7 @@ #include #include - -#if QT_VERSION >= 0x050000 #include -#else -#include -#endif #include @@ -17,13 +12,8 @@ public: ~QtBackendImpl() final = default; gl::ProcAddress getExtensionFunctionPointer(const char* name) final { -#if QT_VERSION >= 0x050000 QOpenGLContext* thisContext = QOpenGLContext::currentContext(); return thisContext->getProcAddress(name); -#else - const QGLContext* thisContext = QGLContext::currentContext(); - return reinterpret_cast(thisContext->getProcAddress(name)); -#endif } void activateContext() final { diff --git a/platform/qt/src/http_file_source.cpp b/platform/qt/src/http_file_source.cpp index b95cfed0e..90abdd0aa 100644 --- a/platform/qt/src/http_file_source.cpp +++ b/platform/qt/src/http_file_source.cpp @@ -29,9 +29,7 @@ void HTTPFileSource::Impl::request(HTTPRequest* req) } QNetworkRequest networkRequest = req->networkRequest(); -#if QT_VERSION >= 0x050600 networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); -#endif data.first = m_manager->get(networkRequest); connect(data.first, SIGNAL(finished()), this, SLOT(onReplyFinished())); @@ -60,15 +58,7 @@ void HTTPFileSource::Impl::cancel(HTTPRequest* req) if (requestsVector.empty()) { m_pending.erase(it); -#if QT_VERSION >= 0x050000 reply->abort(); -#else - // XXX: We should be aborting the reply here - // but a bug on Qt4 causes the connection of - // other ongoing requests to drop if we call - // abort() too often (and we do). - Q_UNUSED(reply); -#endif } } @@ -105,11 +95,7 @@ std::unique_ptr HTTPFileSource::request(const Resource& resource, } uint32_t HTTPFileSource::maximumConcurrentRequests() { -#if QT_VERSION >= 0x050000 return 20; -#else - return 10; -#endif } } // namespace mbgl diff --git a/platform/qt/src/qmapbox.cpp b/platform/qt/src/qmapbox.cpp index 2180f22d0..ab7160c42 100644 --- a/platform/qt/src/qmapbox.cpp +++ b/platform/qt/src/qmapbox.cpp @@ -5,11 +5,7 @@ #include #include -#if QT_VERSION >= 0x050000 #include -#else -#include -#endif // mbgl::NetworkStatus::Status static_assert(mbgl::underlying_type(QMapbox::Online) == mbgl::underlying_type(mbgl::NetworkStatus::Status::Online), "error"); diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index d008ad86c..e292bbd19 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -45,11 +45,7 @@ #include #include -#if QT_VERSION >= 0x050000 #include -#else -#include -#endif #include #include @@ -140,13 +136,8 @@ std::unique_ptr toStyleImage(const QString &id, const QImage .rgbSwapped() .convertToFormat(QImage::Format_ARGB32_Premultiplied); -#if QT_VERSION >= 0x051000 - auto img = std::make_unique(swapped.sizeInBytes()); - memcpy(img.get(), swapped.constBits(), swapped.sizeInBytes()); -#else auto img = std::make_unique(swapped.byteCount()); memcpy(img.get(), swapped.constBits(), swapped.byteCount()); -#endif return std::make_unique( id.toStdString(), @@ -1839,14 +1830,6 @@ void QMapboxGLPrivate::render() createRenderer(); } -#if defined(__APPLE__) && QT_VERSION < 0x050000 - // FIXME Qt 4.x provides an incomplete FBO at start. - // See https://bugreports.qt.io/browse/QTBUG-36802 for details. - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { - return; - } -#endif - m_renderQueued.clear(); m_mapRenderer->render(); } diff --git a/platform/qt/src/qmapboxgl_renderer_backend.cpp b/platform/qt/src/qmapboxgl_renderer_backend.cpp index 917741f5c..c6de7c6d8 100644 --- a/platform/qt/src/qmapboxgl_renderer_backend.cpp +++ b/platform/qt/src/qmapboxgl_renderer_backend.cpp @@ -1,12 +1,7 @@ #include "qmapboxgl_renderer_backend.hpp" -#include - -#if QT_VERSION >= 0x050000 #include -#else -#include -#endif +#include void QMapboxGLRendererBackend::updateAssumedState() { @@ -39,11 +34,6 @@ void QMapboxGLRendererBackend::updateFramebuffer(quint32 fbo, const mbgl::Size & */ mbgl::gl::ProcAddress QMapboxGLRendererBackend::getExtensionFunctionPointer(const char* name) { -#if QT_VERSION >= 0x050000 QOpenGLContext* thisContext = QOpenGLContext::currentContext(); return thisContext->getProcAddress(name); -#else - const QGLContext* thisContext = QGLContext::currentContext(); - return reinterpret_cast(thisContext->getProcAddress(name)); -#endif } diff --git a/platform/qt/src/qt_conversion.hpp b/platform/qt/src/qt_conversion.hpp index 99a262be5..070a3dd37 100644 --- a/platform/qt/src/qt_conversion.hpp +++ b/platform/qt/src/qt_conversion.hpp @@ -35,11 +35,7 @@ public: static bool isObject(const QVariant& value) { return value.canConvert(QVariant::Map) || value.type() == QVariant::ByteArray - #if QT_VERSION >= 0x050000 || QString(value.typeName()) == QStringLiteral("QMapbox::Feature"); - #else - || QString(value.typeName()) == QString("QMapbox::Feature"); - #endif } static optional objectMember(const QVariant& value, const char* key) { @@ -121,11 +117,7 @@ public: } static optional toGeoJSON(const QVariant& value, Error& error) { - #if QT_VERSION >= 0x050000 if (value.typeName() == QStringLiteral("QMapbox::Feature")) { - #else - if (value.typeName() == QString("QMapbox::Feature")) { - #endif return GeoJSON { asMapboxGLFeature(value.value()) }; } else if (value.type() != QVariant::ByteArray) { error = { "JSON data must be in QByteArray" }; diff --git a/platform/qt/src/qt_geojson.cpp b/platform/qt/src/qt_geojson.cpp index 9d0a3e96e..cd808f016 100644 --- a/platform/qt/src/qt_geojson.cpp +++ b/platform/qt/src/qt_geojson.cpp @@ -79,11 +79,7 @@ mbgl::Value asMapboxGLPropertyValue(const QVariant &value) { }; switch (value.type()) { -#if QT_VERSION >= 0x050000 case QMetaType::UnknownType: -#else - case QVariant::Invalid: -#endif return mbgl::NullValue {}; case QMetaType::Bool: return { value.toBool() }; @@ -107,11 +103,7 @@ mbgl::Value asMapboxGLPropertyValue(const QVariant &value) { mbgl::FeatureIdentifier asMapboxGLFeatureIdentifier(const QVariant &id) { switch (id.type()) { -#if QT_VERSION >= 0x050000 case QMetaType::UnknownType: -#else - case QVariant::Invalid: -#endif return {}; case QMetaType::ULongLong: return { uint64_t(id.toULongLong()) }; diff --git a/platform/qt/src/qt_image.cpp b/platform/qt/src/qt_image.cpp index 848a9b7f0..302d39873 100644 --- a/platform/qt/src/qt_image.cpp +++ b/platform/qt/src/qt_image.cpp @@ -45,13 +45,8 @@ PremultipliedImage decodeImage(const std::string& string) { throw std::runtime_error("Unsupported image type"); } -#if QT_VERSION >= 0x051000 - auto img = std::make_unique(image.sizeInBytes()); - memcpy(img.get(), image.constBits(), image.sizeInBytes()); -#else auto img = std::make_unique(image.byteCount()); memcpy(img.get(), image.constBits(), image.byteCount()); -#endif return { { static_cast(image.width()), static_cast(image.height()) }, std::move(img) }; diff --git a/platform/qt/src/sqlite3.cpp b/platform/qt/src/sqlite3.cpp index d27ebf354..642712687 100644 --- a/platform/qt/src/sqlite3.cpp +++ b/platform/qt/src/sqlite3.cpp @@ -26,22 +26,14 @@ namespace sqlite { void checkQueryError(const QSqlQuery& query) { QSqlError lastError = query.lastError(); if (lastError.type() != QSqlError::NoError) { -#if QT_VERSION >= 0x050300 throw Exception { lastError.nativeErrorCode().toInt(), lastError.databaseText().toStdString() }; -#else - throw Exception { lastError.number(), lastError.databaseText().toStdString() }; -#endif } } void checkDatabaseError(const QSqlDatabase &db) { QSqlError lastError = db.lastError(); if (lastError.type() != QSqlError::NoError) { -#if QT_VERSION >= 0x050300 throw Exception { lastError.nativeErrorCode().toInt(), lastError.databaseText().toStdString() }; -#else - throw Exception { lastError.number(), lastError.databaseText().toStdString() }; -#endif } } diff --git a/platform/qt/src/timer.cpp b/platform/qt/src/timer.cpp index a0c1328d6..4ae3631e5 100644 --- a/platform/qt/src/timer.cpp +++ b/platform/qt/src/timer.cpp @@ -9,9 +9,7 @@ namespace mbgl { namespace util { Timer::Impl::Impl() { -#if QT_VERSION >= 0x050000 timer.setTimerType(Qt::PreciseTimer); -#endif connect(&timer, SIGNAL(timeout()), this, SLOT(timerFired())); } diff --git a/platform/qt/test/qmapboxgl.test.cpp b/platform/qt/test/qmapboxgl.test.cpp index 2a56b346a..de0314f0e 100644 --- a/platform/qt/test/qmapboxgl.test.cpp +++ b/platform/qt/test/qmapboxgl.test.cpp @@ -4,9 +4,6 @@ #include -// We're using QGLFramebufferObject, which is only available in Qt 5 and up. -#if QT_VERSION >= 0x050000 - #include #include @@ -76,5 +73,3 @@ TEST_F(QMapboxGLTest, TEST_DISABLED_ON_CI(styleUrl)) { map.setStyleUrl(QString()); runUntil(QMapboxGL::MapChangeDidFailLoadingMap); } - -#endif diff --git a/platform/qt/test/qmapboxgl.test.hpp b/platform/qt/test/qmapboxgl.test.hpp index 04d63610c..43a7c123b 100644 --- a/platform/qt/test/qmapboxgl.test.hpp +++ b/platform/qt/test/qmapboxgl.test.hpp @@ -3,9 +3,6 @@ #include #include -// We're using QGLFramebufferObject, which is only available in Qt 5 and up. -#if QT_VERSION >= 0x050000 - #include #include @@ -32,5 +29,3 @@ private slots: void onMapChanged(QMapboxGL::MapChange); void onNeedsRendering(); }; - -#endif diff --git a/test/fixtures/offline_database/offline_sideload.db b/test/fixtures/offline_database/offline_sideload.db index 6146e30872853f935e585afb96ca03abc3927514..8909c402b226547ece61086b4460889329da7d58 100644 GIT binary patch delta 3291 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 AB>(^b