summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorLeith Bade <leith@leithalweapon.geek.nz>2014-06-24 00:25:20 +1000
committerMike Morris <michael.patrick.morris@gmail.com>2014-09-10 18:21:03 -0400
commitc004c036964e9012b08aa4a2f8b16094630d62be (patch)
treebe5f77b5286b924616a91f574c453bf3aa463ced /common
parentc836bc2b01c1c8642875d86126c1ef2a76dfd359 (diff)
downloadqtlocation-mapboxgl-c004c036964e9012b08aa4a2f8b16094630d62be.tar.gz
Add View::make_inactive() to remove context from rendering thread
View::make_inactive() is called just before termination of the rendering thread. The implementation must clear the thread's GL context. This ensures there is no context still bound to a thread during GL shutdown. This is needed as GL will not actually delete a context until it is not active on any thread. Fixes mapbox/mapbox-gl-native#340 Conflicts: common/glfw_view.hpp include/llmr/map/view.hpp test/headless.cpp
Diffstat (limited to 'common')
-rw-r--r--common/glfw_view.cpp4
-rw-r--r--common/glfw_view.hpp1
-rw-r--r--common/headless_view.cpp13
-rw-r--r--common/headless_view.hpp1
4 files changed, 19 insertions, 0 deletions
diff --git a/common/glfw_view.cpp b/common/glfw_view.cpp
index f53090a000..724b8bf180 100644
--- a/common/glfw_view.cpp
+++ b/common/glfw_view.cpp
@@ -192,6 +192,10 @@ void GLFWView::make_active() {
glfwMakeContextCurrent(window);
}
+void GLFWView::make_inactive() {
+ glfwMakeContextCurrent(nullptr);
+}
+
void GLFWView::swap() {
glfwPostEmptyEvent();
diff --git a/common/glfw_view.hpp b/common/glfw_view.hpp
index d2f6872fc7..04085f7750 100644
--- a/common/glfw_view.hpp
+++ b/common/glfw_view.hpp
@@ -17,6 +17,7 @@ public:
void initialize(mbgl::Map *map);
void swap();
void make_active();
+ void make_inactive();
void notify_map_change(mbgl::MapChange change, mbgl::timestamp delay = 0);
static void key(GLFWwindow *window, int key, int scancode, int action, int mods);
diff --git a/common/headless_view.cpp b/common/headless_view.cpp
index f790d90cec..34326ae29c 100644
--- a/common/headless_view.cpp
+++ b/common/headless_view.cpp
@@ -179,6 +179,19 @@ void HeadlessView::make_active() {
#endif
}
+void HeadlessView::make_inactive() {
+#if MBGL_USE_CGL
+ CGLError error = CGLSetCurrentContext(nullptr);
+ if (error) {
+ fprintf(stderr, "Removing OpenGL context failed\n");
+ }
+#endif
+
+#if MBGL_USE_GLX
+ // no-op
+#endif
+}
+
void HeadlessView::swap() {}
unsigned int HeadlessView::root_fbo() {
diff --git a/common/headless_view.hpp b/common/headless_view.hpp
index 0b255b4a38..a4432bbae3 100644
--- a/common/headless_view.hpp
+++ b/common/headless_view.hpp
@@ -23,6 +23,7 @@ public:
void notify_map_change(MapChange change, timestamp delay = 0);
void make_active();
+ void make_inactive();
void swap();
unsigned int root_fbo();