From 114d3210fb3feb427573e42dd464b7323e8a11b1 Mon Sep 17 00:00:00 2001 From: TomTheFurry Date: Thu, 29 Jun 2023 16:27:42 +0800 Subject: [PATCH] Prob fix the gl error? (might add mem leak tho.) & fix 1.18.2 build --- .../core/render/LodRenderSection.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) 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 41ec163cc..7675cbf2e 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 @@ -20,6 +20,7 @@ import java.util.Objects; import java.util.concurrent.CancellationException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; /** @@ -60,6 +61,7 @@ public class LodRenderSection implements IDebugRenderable /** a reference is used so the render buffer can be swapped to and from the buffer builder */ public final AtomicReference activeRenderBufferRef = new AtomicReference<>(); + private volatile boolean doDisposeActiveBuffer = false; private final QuadTree parentQuadTree; @@ -261,6 +263,11 @@ public class LodRenderSection implements IDebugRenderable */ public boolean tryBuildAndSwapBuffer() { + if (doDisposeActiveBuffer && this.activeRenderBufferRef.get() != null) { + doDisposeActiveBuffer = false; + this.activeRenderBufferRef.getAndSet(null).close(); + return false; + } boolean didSwapped = false; if (canBuildBuffer()) { //if (false) @@ -337,27 +344,26 @@ public class LodRenderSection implements IDebugRenderable public void dispose() { disposeRenderData(); DebugRenderer.unregister(this); + if (doDisposeActiveBuffer && this.activeRenderBufferRef.get() != null) { + this.activeRenderBufferRef.get().close(); + } } public void disposeRenderData() { disposeRenderBuffer(); + this.renderSource = null; if (this.renderSourceLoadFuture != null) { this.renderSourceLoadFuture.cancel(true); this.renderSourceLoadFuture = null; } - this.renderSource = null; } public void disposeRenderBuffer() { cancelBuildBuffer(); - if (this.activeRenderBufferRef.get() != null) - { - ColumnRenderBuffer buffer = this.activeRenderBufferRef.getAndSet(null); - buffer.close(); - } + doDisposeActiveBuffer = true; } public void markBufferDirty() {