[android] hook into surface holder to cleanup renderer on the right thread before the surface is destroyed
This commit is contained in:
committed by
Ivo van Dongen
parent
ceea900578
commit
3802f7e922
@@ -74,6 +74,11 @@ public abstract class MapRenderer implements MapRendererScheduler {
|
||||
nativeOnSurfaceChanged(width, height);
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
protected void onSurfaceDestroyed() {
|
||||
nativeOnSurfaceDestroyed();
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
protected void onDrawFrame(GL10 gl) {
|
||||
long startTime = System.nanoTime();
|
||||
@@ -123,6 +128,8 @@ public abstract class MapRenderer implements MapRendererScheduler {
|
||||
|
||||
private native void nativeOnSurfaceChanged(int width, int height);
|
||||
|
||||
private native void nativeOnSurfaceDestroyed();
|
||||
|
||||
private native void nativeRender();
|
||||
|
||||
private long timeElapsed;
|
||||
|
||||
@@ -4,6 +4,8 @@ import android.content.Context;
|
||||
import android.opengl.GLSurfaceView;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.SurfaceHolder;
|
||||
|
||||
import com.mapbox.mapboxsdk.maps.renderer.MapRenderer;
|
||||
import com.mapbox.mapboxsdk.maps.renderer.egl.EGLConfigChooser;
|
||||
|
||||
@@ -33,6 +35,15 @@ public class GLSurfaceViewMapRenderer extends MapRenderer implements GLSurfaceVi
|
||||
glSurfaceView.setRenderer(this);
|
||||
glSurfaceView.setRenderMode(RENDERMODE_WHEN_DIRTY);
|
||||
glSurfaceView.setPreserveEGLContextOnPause(true);
|
||||
|
||||
glSurfaceView.getHolder().addCallback(new SurfaceHolderCallbackAdapter() {
|
||||
|
||||
@Override
|
||||
public void surfaceDestroyed(SurfaceHolder holder) {
|
||||
GLSurfaceViewMapRenderer.this.onSurfaceDestroyed();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.mapbox.mapboxsdk.maps.renderer.glsurfaceview;
|
||||
|
||||
import android.view.SurfaceHolder;
|
||||
|
||||
class SurfaceHolderCallbackAdapter implements SurfaceHolder.Callback {
|
||||
|
||||
@Override
|
||||
public void surfaceCreated(SurfaceHolder holder) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void surfaceDestroyed(SurfaceHolder holder) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -53,6 +53,14 @@ public class TextureViewMapRenderer extends MapRenderer {
|
||||
super.onSurfaceChanged(gl, width, height);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overridden to provide package access
|
||||
*/
|
||||
@Override
|
||||
protected void onSurfaceDestroyed() {
|
||||
super.onSurfaceDestroyed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Overridden to provide package access
|
||||
*/
|
||||
|
||||
@@ -197,6 +197,7 @@ class TextureViewRenderThread extends Thread implements TextureView.SurfaceTextu
|
||||
if (destroySurface) {
|
||||
eglHolder.destroySurface();
|
||||
destroySurface = false;
|
||||
mapRenderer.onSurfaceDestroyed();
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user