Ensure no GL commands are executed after pause

This commit is contained in:
John Firebaugh
2015-05-04 18:27:48 -07:00
parent da8aaa2114
commit 00a1f44cfc
5 changed files with 10 additions and 12 deletions

View File

@@ -360,7 +360,7 @@ void NativeMapView::createSurface(ANativeWindow *window_) {
void NativeMapView::destroySurface() {
mbgl::Log::Debug(mbgl::Event::Android, "NativeMapView::destroySurface");
pause(true);
pause();
if (surface != EGL_NO_SURFACE) {
if (!eglDestroySurface(display, surface)) {
@@ -674,12 +674,11 @@ void loadExtensions() {
}
}
void NativeMapView::pause(bool waitForPause) {
mbgl::Log::Debug(mbgl::Event::Android, "NativeMapView::pause %s",
(waitForPause) ? "true" : "false");
void NativeMapView::pause() {
mbgl::Log::Debug(mbgl::Event::Android, "NativeMapView::pause");
if ((display != EGL_NO_DISPLAY) && (context != EGL_NO_CONTEXT)) {
map.pause(waitForPause);
map.pause();
}
}

View File

@@ -40,7 +40,7 @@ public:
void destroySurface();
void resume();
void pause(bool waitForPause = false);
void pause();
void enableFps(bool enable);
void updateFps();

View File

@@ -36,7 +36,7 @@ public:
~Map();
// Pauses the render thread. The render thread will stop running but will not be terminated and will not lose state until resumed.
void pause(bool waitForPause = false);
void pause();
// Resumes a paused render thread
void resume();

View File

@@ -20,15 +20,12 @@ Map::~Map() {
resume();
}
void Map::pause(bool waitForPause) {
void Map::pause() {
assert(data->mode == MapMode::Continuous);
std::unique_lock<std::mutex> lockPause(data->mutexPause);
context->invoke(&MapContext::pause);
if (waitForPause) {
data->condPaused.wait(lockPause);
}
data->condPaused.wait(lockPause);
}
void Map::resume() {

View File

@@ -77,6 +77,8 @@ MapContext::~MapContext() {
}
void MapContext::pause() {
MBGL_CHECK_ERROR(glFinish());
view.deactivate();
std::unique_lock<std::mutex> lockPause(data.mutexPause);