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/darwin/src/headless_backend_eagl.mm | |
parent | 335f04f7e13422ce53cbbf13cebb8283149faba8 (diff) | |
download | qtlocation-mapboxgl-2eec5a19803a01e21d5793706ae69ac0d886cee5.tar.gz |
[core] move HeadlessBackend extension initialization code into Impl
Diffstat (limited to 'platform/darwin/src/headless_backend_eagl.mm')
-rw-r--r-- | platform/darwin/src/headless_backend_eagl.mm | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/platform/darwin/src/headless_backend_eagl.mm b/platform/darwin/src/headless_backend_eagl.mm index 6bf5787f60..050fa62c78 100644 --- a/platform/darwin/src/headless_backend_eagl.mm +++ b/platform/darwin/src/headless_backend_eagl.mm @@ -6,8 +6,9 @@ namespace mbgl { -struct EAGLImpl : public HeadlessBackend::Impl { - EAGLImpl() { +class EAGLBackendImpl : public HeadlessBackend::Impl { +public: + EAGLBackendImpl() { glContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; if (glContext == nil) { throw std::runtime_error("Error creating GL context object"); @@ -16,7 +17,21 @@ struct EAGLImpl : public HeadlessBackend::Impl { } // Required for ARC to deallocate correctly. - ~EAGLImpl() final = default; + ~EAGLBackendImpl() final = default; + + gl::ProcAddress getExtensionFunctionPointer(const char* name) final { + static CFBundleRef framework = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.opengles")); + if (!framework) { + throw std::runtime_error("Failed to load OpenGL framework."); + } + + CFStringRef str = + CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingASCII); + void* symbol = CFBundleGetFunctionPointerForName(framework, str); + CFRelease(str); + + return reinterpret_cast<gl::ProcAddress>(symbol); + } void activateContext() final { [EAGLContext setCurrentContext:glContext]; @@ -30,22 +45,9 @@ private: EAGLContext* glContext = nullptr; }; -gl::ProcAddress HeadlessBackend::initializeExtension(const char* name) { - static CFBundleRef framework = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.opengles")); - if (!framework) { - throw std::runtime_error("Failed to load OpenGL framework."); - } - - CFStringRef str = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingASCII); - void* symbol = CFBundleGetFunctionPointerForName(framework, str); - CFRelease(str); - - return reinterpret_cast<gl::ProcAddress>(symbol); -} - -void HeadlessBackend::createContext() { - assert(!hasContext()); - impl = std::make_unique<EAGLImpl>(); +void HeadlessBackend::createImpl() { + assert(!impl); + impl = std::make_unique<EAGLBackendImpl>(); } } // namespace mbgl |