From 8c1be4ec01ef46bf453856531ebf53b48ce3dbe7 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Wed, 29 Nov 2017 20:28:50 +0200 Subject: Bump Mapbox GL Native mapbox-gl-native @ 8757164ac8f2b033b2b12d4baf075ed18cfeb2b4 --- include/mbgl/renderer/renderer_backend.hpp | 2 +- include/mbgl/style/conversion.hpp | 15 ++++++--- platform/default/headless_backend_osmesa.cpp | 44 ++++++++++++--------------- platform/default/mbgl/gl/headless_backend.cpp | 17 ++++++----- platform/default/mbgl/gl/headless_backend.hpp | 15 ++++----- platform/default/mbgl/gl/headless_display.cpp | 15 --------- platform/default/mbgl/gl/headless_display.hpp | 34 --------------------- platform/qt/src/qmapboxgl.cpp | 2 +- platform/qt/src/qmapboxgl_p.hpp | 2 +- src/mbgl/layout/symbol_projection.hpp | 8 +++++ src/mbgl/renderer/renderer_backend.cpp | 2 +- src/parsedate/parsedate.c | 18 +++++------ 12 files changed, 66 insertions(+), 108 deletions(-) delete mode 100644 platform/default/mbgl/gl/headless_display.cpp delete mode 100644 platform/default/mbgl/gl/headless_display.hpp diff --git a/include/mbgl/renderer/renderer_backend.hpp b/include/mbgl/renderer/renderer_backend.hpp index 295838c71b..b83c128169 100644 --- a/include/mbgl/renderer/renderer_backend.hpp +++ b/include/mbgl/renderer/renderer_backend.hpp @@ -41,7 +41,7 @@ protected: // Called with the name of an OpenGL extension that should be loaded. RendererBackend implementations // must call the API-specific version that obtains the function pointer for this function, // or a null pointer if unsupported/unavailable. - virtual gl::ProcAddress initializeExtension(const char*) = 0; + virtual gl::ProcAddress getExtensionFunctionPointer(const char*) = 0; // Called when the backend's GL context needs to be made active or inactive. These are called, // as a matched pair, exclusively through BackendScope, in two situations: diff --git a/include/mbgl/style/conversion.hpp b/include/mbgl/style/conversion.hpp index 0b7e0b2b2f..71c2cec237 100644 --- a/include/mbgl/style/conversion.hpp +++ b/include/mbgl/style/conversion.hpp @@ -222,6 +222,15 @@ private: optional (*toGeoJSON) (const Storage&, Error&); }; + // Extracted this function from the table below to work around a GCC bug with differing + // visibility settings for capturing lambdas: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80947 + template + static auto vtableEachMember(const Storage& s, const std::function(const std::string&, const Convertible&)>& fn) { + return ConversionTraits::eachMember(reinterpret_cast(s), [&](const std::string& k, T&& v) { + return fn(k, Convertible(std::move(v))); + }); + } + template static VTable* vtableForType() { using Traits = ConversionTraits; @@ -257,11 +266,7 @@ private: return optional(); } }, - [] (const Storage& s, const std::function (const std::string&, const Convertible&)>& fn) { - return Traits::eachMember(reinterpret_cast(s), [&](const std::string& k, T&& v) { - return fn(k, Convertible(std::move(v))); - }); - }, + vtableEachMember, [] (const Storage& s) { return Traits::toBool(reinterpret_cast(s)); }, diff --git a/platform/default/headless_backend_osmesa.cpp b/platform/default/headless_backend_osmesa.cpp index 5042f5ed10..0da1caf9af 100644 --- a/platform/default/headless_backend_osmesa.cpp +++ b/platform/default/headless_backend_osmesa.cpp @@ -7,45 +7,41 @@ namespace mbgl { -struct OSMesaImpl : public HeadlessBackend::Impl { - OSMesaImpl(OSMesaContext glContext_) : glContext(glContext_) { +class OSMesaBackendImpl : public HeadlessBackend::Impl { +public: + OSMesaBackendImpl() { +#if OSMESA_MAJOR_VERSION * 100 + OSMESA_MINOR_VERSION >= 305 + glContext = OSMesaCreateContextExt(OSMESA_RGBA, 16, 0, 0, nullptr); +#else + glContext = OSMesaCreateContext(OSMESA_RGBA, nullptr); +#endif + if (glContext == nullptr) { + throw std::runtime_error("Error creating GL context object."); + } } - ~OSMesaImpl() { + ~OSMesaBackendImpl() final { OSMesaDestroyContext(glContext); } + gl::ProcAddress getExtensionFunctionPointer(const char* name) final { + return OSMesaGetProcAddress(name); + } + void activateContext() final { if (!OSMesaMakeCurrent(glContext, &fakeBuffer, GL_UNSIGNED_BYTE, 1, 1)) { throw std::runtime_error("Switching OpenGL context failed.\n"); } } +private: OSMesaContext glContext = nullptr; GLubyte fakeBuffer = 0; }; -gl::ProcAddress HeadlessBackend::initializeExtension(const char* name) { - return OSMesaGetProcAddress(name); -} - -bool HeadlessBackend::hasDisplay() { - return true; -}; - -void HeadlessBackend::createContext() { - assert(!hasContext()); - -#if OSMESA_MAJOR_VERSION * 100 + OSMESA_MINOR_VERSION >= 305 - OSMesaContext glContext = OSMesaCreateContextExt(OSMESA_RGBA, 16, 0, 0, nullptr); -#else - OSMesaContext glContext = OSMesaCreateContext(OSMESA_RGBA, nullptr); -#endif - if (glContext == nullptr) { - throw std::runtime_error("Error creating GL context object."); - } - - impl.reset(new OSMesaImpl(glContext)); +void HeadlessBackend::createImpl() { + assert(!impl); + impl = std::make_unique(); } } // namespace mbgl diff --git a/platform/default/mbgl/gl/headless_backend.cpp b/platform/default/mbgl/gl/headless_backend.cpp index edf637a560..ba08aecab7 100644 --- a/platform/default/mbgl/gl/headless_backend.cpp +++ b/platform/default/mbgl/gl/headless_backend.cpp @@ -1,5 +1,4 @@ #include -#include #include #include @@ -32,22 +31,24 @@ HeadlessBackend::~HeadlessBackend() { context.reset(); } +gl::ProcAddress HeadlessBackend::getExtensionFunctionPointer(const char* name) { + assert(impl); + return impl->getExtensionFunctionPointer(name); +} + void HeadlessBackend::activate() { active = true; - if (!hasContext()) { - if (!hasDisplay()) { - throw std::runtime_error("Display is not set"); - } - createContext(); + if (!impl) { + createImpl(); } - assert(hasContext()); + assert(impl); impl->activateContext(); } void HeadlessBackend::deactivate() { - assert(hasContext()); + assert(impl); impl->deactivateContext(); active = false; } diff --git a/platform/default/mbgl/gl/headless_backend.hpp b/platform/default/mbgl/gl/headless_backend.hpp index 66f861e213..7757037533 100644 --- a/platform/default/mbgl/gl/headless_backend.hpp +++ b/platform/default/mbgl/gl/headless_backend.hpp @@ -7,8 +7,6 @@ namespace mbgl { -class HeadlessDisplay; - class HeadlessBackend : public RendererBackend { public: HeadlessBackend(Size = { 256, 256 }); @@ -21,25 +19,24 @@ public: void setSize(Size); PremultipliedImage readStillImage(); - struct Impl { + class Impl { + public: virtual ~Impl() = default; + virtual gl::ProcAddress getExtensionFunctionPointer(const char*) = 0; virtual void activateContext() = 0; virtual void deactivateContext() {} }; private: // Implementation specific functions - gl::ProcAddress initializeExtension(const char*) override; + gl::ProcAddress getExtensionFunctionPointer(const char*) override; void activate() override; void deactivate() override; - bool hasContext() const { return bool(impl); } - bool hasDisplay(); - - void createContext(); + void createImpl(); - std::shared_ptr display; +private: std::unique_ptr impl; Size size; diff --git a/platform/default/mbgl/gl/headless_display.cpp b/platform/default/mbgl/gl/headless_display.cpp deleted file mode 100644 index 6247046c29..0000000000 --- a/platform/default/mbgl/gl/headless_display.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include - -namespace mbgl { - -class HeadlessDisplay::Impl {}; - -HeadlessDisplay::HeadlessDisplay() { - // no-op -} - -HeadlessDisplay::~HeadlessDisplay() { - // no-op -} - -} // namespace mbgl diff --git a/platform/default/mbgl/gl/headless_display.hpp b/platform/default/mbgl/gl/headless_display.hpp deleted file mode 100644 index 8c294655e5..0000000000 --- a/platform/default/mbgl/gl/headless_display.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include - -namespace mbgl { - -class HeadlessDisplay { -public: - static std::shared_ptr create() { - static std::weak_ptr instance; - - auto shared = instance.lock(); - - if (!shared) { - instance = shared = std::shared_ptr(new HeadlessDisplay()); - } - - return shared; - } - - - ~HeadlessDisplay(); - - template - DisplayAttribute attribute() const; - -private: - HeadlessDisplay(); - - class Impl; - std::unique_ptr impl; -}; - -} // namespace mbgl diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index cc1d88e22f..2675d87862 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -1695,7 +1695,7 @@ void QMapboxGLPrivate::onSourceChanged(mbgl::style::Source&) Initializes an OpenGL extension function such as Vertex Array Objects (VAOs), required by Mapbox GL Native engine. */ -mbgl::gl::ProcAddress QMapboxGLPrivate::initializeExtension(const char* name) { +mbgl::gl::ProcAddress QMapboxGLPrivate::getExtensionFunctionPointer(const char* name) { #if QT_VERSION >= 0x050000 QOpenGLContext* thisContext = QOpenGLContext::currentContext(); return thisContext->getProcAddress(name); diff --git a/platform/qt/src/qmapboxgl_p.hpp b/platform/qt/src/qmapboxgl_p.hpp index 5e12b44a20..f947c09f48 100644 --- a/platform/qt/src/qmapboxgl_p.hpp +++ b/platform/qt/src/qmapboxgl_p.hpp @@ -61,7 +61,7 @@ public: bool dirty { false }; private: - mbgl::gl::ProcAddress initializeExtension(const char*) override; + mbgl::gl::ProcAddress getExtensionFunctionPointer(const char*) override; public slots: void connectionEstablished(); diff --git a/src/mbgl/layout/symbol_projection.hpp b/src/mbgl/layout/symbol_projection.hpp index 8535014f22..3e57d162fd 100644 --- a/src/mbgl/layout/symbol_projection.hpp +++ b/src/mbgl/layout/symbol_projection.hpp @@ -23,9 +23,17 @@ namespace mbgl { }; struct PlacedGlyph { + PlacedGlyph() = default; + PlacedGlyph(Point point_, float angle_, optional tileDistance_) : point(point_), angle(angle_), tileDistance(std::move(tileDistance_)) {} + PlacedGlyph(PlacedGlyph&& other) noexcept + : point(std::move(other.point)), angle(other.angle), tileDistance(std::move(other.tileDistance)) + {} + PlacedGlyph(const PlacedGlyph& other) + : point(std::move(other.point)), angle(other.angle), tileDistance(std::move(other.tileDistance)) + {} Point point; float angle; optional tileDistance; diff --git a/src/mbgl/renderer/renderer_backend.cpp b/src/mbgl/renderer/renderer_backend.cpp index 159ef432b3..22d263313c 100644 --- a/src/mbgl/renderer/renderer_backend.cpp +++ b/src/mbgl/renderer/renderer_backend.cpp @@ -16,7 +16,7 @@ gl::Context& RendererBackend::getContext() { context = std::make_unique(); context->enableDebugging(); context->initializeExtensions( - std::bind(&RendererBackend::initializeExtension, this, std::placeholders::_1)); + std::bind(&RendererBackend::getExtensionFunctionPointer, this, std::placeholders::_1)); }); return *context; } diff --git a/src/parsedate/parsedate.c b/src/parsedate/parsedate.c index 46acceed75..7228c4edbc 100644 --- a/src/parsedate/parsedate.c +++ b/src/parsedate/parsedate.c @@ -418,7 +418,7 @@ static time_t my_timegm(struct my_tm *tm) { static const int month_days_cumulative [12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; - int month, year, leap_days; + int month_, year, leap_days; if(tm->tm_year < 70) /* we don't support years before 1970 as they will cause this function @@ -426,14 +426,14 @@ static time_t my_timegm(struct my_tm *tm) return -1; year = tm->tm_year + 1900; - month = tm->tm_mon; - if(month < 0) { - year += (11 - month) / 12; - month = 11 - (11 - month) % 12; + month_ = tm->tm_mon; + if(month_ < 0) { + year += (11 - month_) / 12; + month_ = 11 - (11 - month_) % 12; } - else if(month >= 12) { - year -= month / 12; - month = month % 12; + else if(month_ >= 12) { + year -= month_ / 12; + month_ = month_ % 12; } leap_days = year - (tm->tm_mon <= 1); @@ -441,7 +441,7 @@ static time_t my_timegm(struct my_tm *tm) - (1969 / 4) + (1969 / 100) - (1969 / 400)); return ((((time_t) (year - 1970) * 365 - + leap_days + month_days_cumulative [month] + tm->tm_mday - 1) * 24 + + leap_days + month_days_cumulative [month_] + tm->tm_mday - 1) * 24 + tm->tm_hour) * 60 + tm->tm_min) * 60 + tm->tm_sec; } -- cgit v1.2.1