diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/LodQuadTree.java b/core/src/main/java/com/seibel/distanthorizons/core/render/LodQuadTree.java index 04fc23659..746b21602 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/LodQuadTree.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/LodQuadTree.java @@ -481,7 +481,7 @@ public class LodQuadTree extends QuadTree implements AutoClose QuadNode quadNode = nodeIterator.next(); if (quadNode.value != null) { - quadNode.value.disposeRenderData(); + quadNode.value.dispose(); quadNode.value = null; } } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/LodRenderSection.java b/core/src/main/java/com/seibel/distanthorizons/core/render/LodRenderSection.java index ef5574629..25c09c34b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/LodRenderSection.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/LodRenderSection.java @@ -279,7 +279,7 @@ public class LodRenderSection implements IDebugRenderable public boolean canSwapBuffer() { return this.buildRenderBufferFuture != null && this.buildRenderBufferFuture.isDone(); } - private void cancelBuildBuffer() + public synchronized void disposeRenderData() // synchronized is a band-aid solution to prevent a rare bug where the future isn't canceled in the right order { if (this.buildRenderBufferFuture != null) { @@ -287,12 +287,8 @@ public class LodRenderSection implements IDebugRenderable this.buildRenderBufferFuture.cancel(true); this.buildRenderBufferFuture = null; } - } - - - public synchronized void disposeRenderData() // synchronized is a band-aid solution to prevent a rare bug where the future isn't canceled in the right order - { - this.disposeRenderBuffer(); + this.disposeActiveBuffer = true; + this.renderSource = null; if (this.renderSourceLoadFuture != null) { @@ -301,12 +297,6 @@ public class LodRenderSection implements IDebugRenderable } } - public void disposeRenderBuffer() - { - this.cancelBuildBuffer(); - this.disposeActiveBuffer = true; - } - /** * Try and swap in new render buffer for this section. Note that before this call, there should be no other @@ -387,6 +377,7 @@ public class LodRenderSection implements IDebugRenderable { // the old buffer is now considered unloaded, it will need to be freshly re-loaded oldBuffer.buffersUploaded = false; + oldBuffer.close(); } ColumnRenderBuffer swapped = this.inactiveRenderBufferRef.swap(oldBuffer); didSwapped = true; @@ -431,10 +422,14 @@ public class LodRenderSection implements IDebugRenderable { this.disposeRenderData(); DebugRenderer.unregister(this, Config.Client.Advanced.Debugging.DebugWireframe.showRenderSectionStatus); - if (this.disposeActiveBuffer && this.activeRenderBufferRef.get() != null) + if (this.activeRenderBufferRef.get() != null) { this.activeRenderBufferRef.get().close(); } + if (this.inactiveRenderBufferRef.value != null) + { + this.inactiveRenderBufferRef.value.close(); + } } @Override diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java index 9ca04ae85..024eb70fa 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java @@ -583,7 +583,6 @@ public class LodRenderer try { this.setupLock.lock(); - this.isSetupComplete = false; GLProxy.getInstance().recordOpenGlCall(() -> {