summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2017-09-11 11:04:53 +0300
committerIvo van Dongen <ivovandongen@users.noreply.github.com>2017-09-22 23:33:56 +0300
commit15a47d116a0fc15d249b37574fcd932ce88909df (patch)
tree520327b215324b19cf30ecd207fad651b7b83fba /platform/android/MapboxGLAndroidSDK
parent347d7c19c0a70f91252163b14e37583eea83fdd5 (diff)
downloadqtlocation-mapboxgl-15a47d116a0fc15d249b37574fcd932ce88909df.tar.gz
[android] schedule work on the gl thread using GLSurfaceView#queueEvent
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java12
-rwxr-xr-xplatform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java44
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/GlSurfaceViewRenderThread.java25
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/RenderThread.java12
4 files changed, 76 insertions, 17 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
index a920bed720..086f57abf6 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
@@ -28,6 +28,7 @@ import com.mapbox.mapboxsdk.annotations.MarkerViewManager;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
import com.mapbox.mapboxsdk.constants.Style;
import com.mapbox.mapboxsdk.egl.EGLConfigChooser;
+import com.mapbox.mapboxsdk.maps.renderer.GlSurfaceViewRenderThread;
import com.mapbox.mapboxsdk.maps.widgets.CompassView;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationView;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings;
@@ -312,6 +313,8 @@ public class MapView extends FrameLayout {
});
glSurfaceView.setRenderMode(RENDERMODE_WHEN_DIRTY);
glSurfaceView.setVisibility(View.VISIBLE);
+
+ nativeMapView.setRenderThread(new GlSurfaceViewRenderThread(glSurfaceView));
}
/**
@@ -494,15 +497,6 @@ public class MapView extends FrameLayout {
// Rendering
//
- // Called when the map needs to be rerendered
- // Called via JNI from NativeMapView
- protected void onInvalidate() {
- if (glSurfaceView != null) {
- glSurfaceView.requestRender();
- }
- // TODO: removable? postInvalidate();
- }
-
@Override
protected void onSizeChanged(int width, int height, int oldw, int oldh) {
if (destroyed) {
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java
index a97b7cc8f2..240e68bf13 100755
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java
@@ -20,6 +20,7 @@ import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
import com.mapbox.mapboxsdk.geometry.ProjectedMeters;
+import com.mapbox.mapboxsdk.maps.renderer.RenderThread;
import com.mapbox.mapboxsdk.storage.FileSource;
import com.mapbox.mapboxsdk.style.layers.CannotAddLayerException;
import com.mapbox.mapboxsdk.style.layers.Filter;
@@ -52,6 +53,9 @@ final class NativeMapView implements GLSurfaceView.Renderer {
// Used for callbacks
private MapView mapView;
+ // Used to schedule work on the render thread
+ private RenderThread renderThread;
+
//Hold a reference to prevent it from being GC'd as long as it's used on the native side
private final FileSource fileSource;
@@ -69,7 +73,7 @@ final class NativeMapView implements GLSurfaceView.Renderer {
// Constructors
//
- public NativeMapView(MapView mapView) {
+ public NativeMapView(final MapView mapView) {
Context context = mapView.getContext();
fileSource = FileSource.getInstance(context);
@@ -84,6 +88,10 @@ final class NativeMapView implements GLSurfaceView.Renderer {
// Methods
//
+ public void setRenderThread(RenderThread renderThread) {
+ this.renderThread = renderThread;
+ }
+
private boolean isDestroyedOn(String callingMethod) {
if (destroyed && !TextUtils.isEmpty(callingMethod)) {
Timber.e(
@@ -104,7 +112,8 @@ final class NativeMapView implements GLSurfaceView.Renderer {
if (isDestroyedOn("update")) {
return;
}
- nativeUpdate();
+
+ requestRender();
}
public void render() {
@@ -864,9 +873,28 @@ final class NativeMapView implements GLSurfaceView.Renderer {
// Callbacks
//
- protected void onInvalidate() {
- if (mapView != null) {
- mapView.onInvalidate();
+ /**
+ * Called from JNI whenever the native map
+ * needs rendering.
+ */
+ protected void requestRender() {
+ if (renderThread != null) {
+ renderThread.requestRender();
+ }
+ }
+
+ /**
+ * Called from JNI when work needs to be processed on
+ * the Renderer Thread.
+ */
+ protected void requestProcessing() {
+ if (renderThread != null) {
+ renderThread.queueEvent(new Runnable() {
+ @Override
+ public void run() {
+ nativeProcess();
+ }
+ });
}
}
@@ -905,6 +933,8 @@ final class NativeMapView implements GLSurfaceView.Renderer {
private native void nativeDestroy();
+ private native void nativeProcess();
+
private native void nativeInitializeDisplay();
private native void nativeTerminateDisplay();
@@ -1130,9 +1160,7 @@ final class NativeMapView implements GLSurfaceView.Renderer {
void addSnapshotCallback(@NonNull MapboxMap.SnapshotReadyCallback callback) {
snapshotReadyCallback = callback;
scheduleTakeSnapshot();
- mapView.onInvalidate();
- // TODO. this should do a request render
- //render();
+ renderThread.requestRender();
}
//
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/GlSurfaceViewRenderThread.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/GlSurfaceViewRenderThread.java
new file mode 100644
index 0000000000..4b8df51dbe
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/GlSurfaceViewRenderThread.java
@@ -0,0 +1,25 @@
+package com.mapbox.mapboxsdk.maps.renderer;
+
+import android.opengl.GLSurfaceView;
+
+/**
+ * {@link RenderThread} implementation that schedules using the
+ * {@link GLSurfaceView} thread.
+ */
+public class GlSurfaceViewRenderThread implements RenderThread {
+ private final GLSurfaceView surfaceView;
+
+ public GlSurfaceViewRenderThread(GLSurfaceView surfaceView) {
+ this.surfaceView = surfaceView;
+ }
+
+ @Override
+ public void requestRender() {
+ surfaceView.requestRender();
+ }
+
+ @Override
+ public void queueEvent(Runnable runnable) {
+ surfaceView.queueEvent(runnable);
+ }
+}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/RenderThread.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/RenderThread.java
new file mode 100644
index 0000000000..3b9f0f2151
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/renderer/RenderThread.java
@@ -0,0 +1,12 @@
+package com.mapbox.mapboxsdk.maps.renderer;
+
+/**
+ * Created by ivo on 11/09/2017.
+ */
+
+public interface RenderThread {
+
+ void requestRender();
+
+ void queueEvent(Runnable runnable);
+}