Fix requestRenderAndNotify continuous callback (#3913)
This commit is contained in:
@@ -334,7 +334,15 @@ public abstract class MapLibreSurfaceView extends SurfaceView implements Surface
|
||||
wantRenderNotification = true;
|
||||
requestRender = true;
|
||||
renderComplete = false;
|
||||
finishDrawingRunnable = finishDrawing;
|
||||
final Runnable oldCallback = finishDrawingRunnable;
|
||||
finishDrawingRunnable = () -> {
|
||||
if (oldCallback != null) {
|
||||
oldCallback.run();
|
||||
}
|
||||
if (finishDrawing != null) {
|
||||
finishDrawing.run();
|
||||
}
|
||||
};
|
||||
|
||||
renderThreadManager.notifyAll();
|
||||
}
|
||||
@@ -490,7 +498,7 @@ public abstract class MapLibreSurfaceView extends SurfaceView implements Surface
|
||||
protected ArrayList<Runnable> eventQueue = new ArrayList<>();
|
||||
protected boolean sizeChanged = true;
|
||||
protected Runnable finishDrawingRunnable = null;
|
||||
protected RenderThreadManager renderThreadManager = null;
|
||||
protected final RenderThreadManager renderThreadManager;
|
||||
// End of member variables protected by the sRenderThreadManager monitor.
|
||||
|
||||
}
|
||||
|
||||
@@ -310,7 +310,7 @@ public class MapLibreGLSurfaceView extends MapLibreSurfaceView {
|
||||
return function + " failed: " + EGLLogWrapper.getErrorString(error);
|
||||
}
|
||||
|
||||
private WeakReference<MapLibreGLSurfaceView> mGLSurfaceViewWeakRef;
|
||||
private final WeakReference<MapLibreGLSurfaceView> mGLSurfaceViewWeakRef;
|
||||
EGL10 mEgl;
|
||||
EGLDisplay mEglDisplay;
|
||||
EGLSurface mEglSurface;
|
||||
@@ -561,14 +561,17 @@ public class MapLibreGLSurfaceView extends MapLibreSurfaceView {
|
||||
sizeChanged = false;
|
||||
}
|
||||
|
||||
MapLibreSurfaceView view = mSurfaceViewWeakRef.get();
|
||||
if (view != null) {
|
||||
view.renderer.onDrawFrame();
|
||||
if (finishDrawingRunnable != null) {
|
||||
finishDrawingRunnable.run();
|
||||
finishDrawingRunnable = null;
|
||||
{
|
||||
MapLibreSurfaceView view = mSurfaceViewWeakRef.get();
|
||||
if (view != null) {
|
||||
view.renderer.onDrawFrame();
|
||||
if (finishDrawingRunnable != null) {
|
||||
finishDrawingRunnable.run();
|
||||
finishDrawingRunnable = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int swapError = eglHelper.swap();
|
||||
switch (swapError) {
|
||||
case EGL10.EGL_SUCCESS:
|
||||
|
||||
@@ -129,9 +129,8 @@ public class MapLibreVulkanSurfaceView extends MapLibreSurfaceView {
|
||||
continue;
|
||||
}
|
||||
|
||||
MapLibreVulkanSurfaceView view = mSurfaceViewWeakRef.get();
|
||||
|
||||
if (destroySurface) {
|
||||
MapLibreVulkanSurfaceView view = mSurfaceViewWeakRef.get();
|
||||
if (view != null) {
|
||||
view.renderer.onSurfaceDestroyed();
|
||||
destroySurface = false;
|
||||
@@ -140,6 +139,7 @@ public class MapLibreVulkanSurfaceView extends MapLibreSurfaceView {
|
||||
}
|
||||
|
||||
if (initSurface) {
|
||||
MapLibreVulkanSurfaceView view = mSurfaceViewWeakRef.get();
|
||||
if (view != null) {
|
||||
view.renderer.onSurfaceCreated(view.getHolder().getSurface());
|
||||
initSurface = false;
|
||||
@@ -147,17 +147,21 @@ public class MapLibreVulkanSurfaceView extends MapLibreSurfaceView {
|
||||
}
|
||||
|
||||
if (sizeChanged) {
|
||||
MapLibreVulkanSurfaceView view = mSurfaceViewWeakRef.get();
|
||||
if (view != null) {
|
||||
view.renderer.onSurfaceChanged(w, h);
|
||||
sizeChanged = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (view != null) {
|
||||
view.renderer.onDrawFrame();
|
||||
if (finishDrawingRunnable != null) {
|
||||
finishDrawingRunnable.run();
|
||||
finishDrawingRunnable = null;
|
||||
{
|
||||
MapLibreVulkanSurfaceView view = mSurfaceViewWeakRef.get();
|
||||
if (view != null) {
|
||||
view.renderer.onDrawFrame();
|
||||
if (finishDrawingRunnable != null) {
|
||||
finishDrawingRunnable.run();
|
||||
finishDrawingRunnable = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,6 +174,6 @@ public class MapLibreVulkanSurfaceView extends MapLibreSurfaceView {
|
||||
|
||||
private boolean graphicsSurfaceCreated;
|
||||
|
||||
private WeakReference<MapLibreVulkanSurfaceView> mSurfaceViewWeakRef;
|
||||
private final WeakReference<MapLibreVulkanSurfaceView> mSurfaceViewWeakRef;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user