From 020d14011f4ef71b3dbd07b3297db62c41223734 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sun, 11 Jul 2021 16:05:25 -0400 Subject: [PATCH] v0.9.4: fixed cases of vertex buffers not being cleared --- .../src/main/java/com/watabou/glwrap/Vertexbuffer.java | 10 +++++++++- SPD-classes/src/main/java/com/watabou/noosa/Game.java | 6 ++++-- .../shatteredpixeldungeon/scenes/PixelScene.java | 1 + .../shatteredpixeldungeon/ui/KeyDisplay.java | 7 +++++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/SPD-classes/src/main/java/com/watabou/glwrap/Vertexbuffer.java b/SPD-classes/src/main/java/com/watabou/glwrap/Vertexbuffer.java index a00385913..1544f1303 100644 --- a/SPD-classes/src/main/java/com/watabou/glwrap/Vertexbuffer.java +++ b/SPD-classes/src/main/java/com/watabou/glwrap/Vertexbuffer.java @@ -103,7 +103,15 @@ public class Vertexbuffer { } } - public static void refreshAllBuffers(){ + public static void clear(){ + synchronized (buffers) { + for (Vertexbuffer buf : buffers.toArray(new Vertexbuffer[0])) { + buf.delete(); + } + } + } + + public static void reload(){ synchronized (buffers) { for (Vertexbuffer buf : buffers) { buf.updateVertices(); diff --git a/SPD-classes/src/main/java/com/watabou/noosa/Game.java b/SPD-classes/src/main/java/com/watabou/noosa/Game.java index 84033e232..48776814c 100644 --- a/SPD-classes/src/main/java/com/watabou/noosa/Game.java +++ b/SPD-classes/src/main/java/com/watabou/noosa/Game.java @@ -102,7 +102,7 @@ public class Game implements ApplicationListener { versionContextRef = Gdx.graphics.getGLVersion(); Blending.useDefault(); TextureCache.reload(); - Vertexbuffer.refreshAllBuffers(); + Vertexbuffer.reload(); } private GLVersion versionContextRef; @@ -119,7 +119,7 @@ public class Game implements ApplicationListener { versionContextRef = Gdx.graphics.getGLVersion(); Blending.useDefault(); TextureCache.reload(); - Vertexbuffer.refreshAllBuffers(); + Vertexbuffer.reload(); } height -= bottomInset; @@ -248,6 +248,8 @@ public class Game implements ApplicationListener { if (scene != null) { scene.destroy(); } + //clear any leftover vertex buffers + Vertexbuffer.clear(); scene = requestedScene; if (onChange != null) onChange.beforeCreate(); scene.create(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java index c473d6a57..e1724d579 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java @@ -245,6 +245,7 @@ public class PixelScene extends Scene { if ((time -= Game.elapsed) <= 0) { alpha( 0f ); parent.remove( this ); + destroy(); } else { alpha( time / FADE_TIME ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/KeyDisplay.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/KeyDisplay.java index 9b4a5d807..8160cd1f0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/KeyDisplay.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/KeyDisplay.java @@ -213,5 +213,12 @@ public class KeyDisplay extends Visual { dirty = false; } + + @Override + public void destroy() { + super.destroy(); + if (buffer != null) + buffer.delete(); + } }