Fix requestRenderAndNotify continuous callback (#3913)

This commit is contained in:
Adrian Cojocaru
2025-10-27 17:04:24 +02:00
committed by GitHub
parent e8c734cd69
commit 512e02410b
3 changed files with 32 additions and 17 deletions

View File

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

View File

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

View File

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