diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2017-11-27 17:25:20 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2017-11-29 15:48:51 +0100 |
commit | 2eec5a19803a01e21d5793706ae69ac0d886cee5 (patch) | |
tree | fb0f1464f1e73eca49dd062dfd70770e84ec6b8b /platform/default | |
parent | 335f04f7e13422ce53cbbf13cebb8283149faba8 (diff) | |
download | qtlocation-mapboxgl-2eec5a19803a01e21d5793706ae69ac0d886cee5.tar.gz |
[core] move HeadlessBackend extension initialization code into Impl
Diffstat (limited to 'platform/default')
-rw-r--r-- | platform/default/headless_backend_osmesa.cpp | 21 | ||||
-rw-r--r-- | platform/default/mbgl/gl/headless_backend.cpp | 13 | ||||
-rw-r--r-- | platform/default/mbgl/gl/headless_backend.hpp | 11 |
3 files changed, 26 insertions, 19 deletions
diff --git a/platform/default/headless_backend_osmesa.cpp b/platform/default/headless_backend_osmesa.cpp index 4cb0bfc5c4..0da1caf9af 100644 --- a/platform/default/headless_backend_osmesa.cpp +++ b/platform/default/headless_backend_osmesa.cpp @@ -7,8 +7,9 @@ namespace mbgl { -struct OSMesaImpl : public HeadlessBackend::Impl { - OSMesaImpl() { +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 @@ -19,10 +20,14 @@ struct OSMesaImpl : public HeadlessBackend::Impl { } } - ~OSMesaImpl() final { + ~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"); @@ -34,13 +39,9 @@ private: GLubyte fakeBuffer = 0; }; -gl::ProcAddress HeadlessBackend::initializeExtension(const char* name) { - return OSMesaGetProcAddress(name); -} - -void HeadlessBackend::createContext() { - assert(!hasContext()); - impl = std::make_unique<OSMesaImpl>(); +void HeadlessBackend::createImpl() { + assert(!impl); + impl = std::make_unique<OSMesaBackendImpl>(); } } // namespace mbgl diff --git a/platform/default/mbgl/gl/headless_backend.cpp b/platform/default/mbgl/gl/headless_backend.cpp index 2c81005686..ba08aecab7 100644 --- a/platform/default/mbgl/gl/headless_backend.cpp +++ b/platform/default/mbgl/gl/headless_backend.cpp @@ -31,19 +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()) { - 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 f96b01300b..7757037533 100644 --- a/platform/default/mbgl/gl/headless_backend.hpp +++ b/platform/default/mbgl/gl/headless_backend.hpp @@ -19,23 +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); } - - void createContext(); + void createImpl(); +private: std::unique_ptr<Impl> impl; Size size; |