diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2015-02-13 16:11:42 -0800 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2015-03-06 15:42:34 +0100 |
commit | e8389d82cdd84d470deb072d82ee9a613cd15df8 (patch) | |
tree | 211e461c0956147cf9fcf04e829dca719219c017 /platform/default/glfw_view.cpp | |
parent | c30bb1a9f80a7a772578d8742e122c013a56202d (diff) | |
download | qtlocation-mapboxgl-e8389d82cdd84d470deb072d82ee9a613cd15df8.tar.gz |
guard against concurrent OpenGL extension loading
Diffstat (limited to 'platform/default/glfw_view.cpp')
-rw-r--r-- | platform/default/glfw_view.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/platform/default/glfw_view.cpp b/platform/default/glfw_view.cpp index 865636aebf..6d23a51ffb 100644 --- a/platform/default/glfw_view.cpp +++ b/platform/default/glfw_view.cpp @@ -2,6 +2,8 @@ #include <mbgl/platform/gl.hpp> #include <mbgl/platform/log.hpp> +pthread_once_t loadGLExtensions = PTHREAD_ONCE_INIT; + GLFWView::GLFWView(bool fullscreen_) : fullscreen(fullscreen_) { #ifdef NVIDIA glDiscardFramebufferEXT = reinterpret_cast<PFNGLDISCARDFRAMEBUFFEREXTPROC>(glfwGetProcAddress("glDiscardFramebufferEXT")); @@ -71,8 +73,8 @@ void GLFWView::initialize(mbgl::Map *map_) { glfwSetScrollCallback(window, onScroll); glfwSetKeyCallback(window, onKey); - const std::string extensions = reinterpret_cast<const char *>(MBGL_CHECK_ERROR(glGetString(GL_EXTENSIONS))); - { + pthread_once(&loadGLExtensions, [] { + const std::string extensions = reinterpret_cast<const char *>(MBGL_CHECK_ERROR(glGetString(GL_EXTENSIONS))); using namespace mbgl; if (extensions.find("GL_KHR_debug") != std::string::npos) { @@ -152,7 +154,7 @@ void GLFWView::initialize(mbgl::Map *map_) { // Require packed depth stencil gl::isPackedDepthStencilSupported = true; gl::isDepth24Supported = true; - } + }); glfwMakeContextCurrent(nullptr); } |