[android] hook into surface holder to cleanup renderer on the right thread before the surface is destroyed

This commit is contained in:
Ivo van Dongen
2019-02-14 11:12:02 +02:00
committed by Ivo van Dongen
parent ceea900578
commit 3802f7e922
7 changed files with 66 additions and 5 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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) {
}
}

View File

@@ -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
*/

View File

@@ -197,6 +197,7 @@ class TextureViewRenderThread extends Thread implements TextureView.SurfaceTextu
if (destroySurface) {
eglHolder.destroySurface();
destroySurface = false;
mapRenderer.onSurfaceDestroyed();
break;
}