From 07a0779ca4971cb169653fba85d14bd1d41a1aaf Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 10 Jul 2024 18:57:09 -0500 Subject: [PATCH] Fix potential light map crashing and memory leak --- .../minecraft/MinecraftRenderWrapper.java | 2 +- .../common/wrappers/misc/LightMapWrapper.java | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java index 47dc0eb11..a89d74b50 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -411,7 +411,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper // so this will have to do for now IDimensionTypeWrapper dimensionType = level.getDimensionType(); - LightMapWrapper wrapper = this.lightmapByDimensionType.compute(dimensionType, (dimType, oldWrapper) -> new LightMapWrapper()); + LightMapWrapper wrapper = this.lightmapByDimensionType.computeIfAbsent(dimensionType, (dimType) -> new LightMapWrapper()); wrapper.uploadLightmap(lightPixels); } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/LightMapWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/LightMapWrapper.java index b6ed1265c..4754ba04c 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/LightMapWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/LightMapWrapper.java @@ -36,14 +36,6 @@ public class LightMapWrapper implements ILightMapWrapper public LightMapWrapper() { } - private void createLightmap(NativeImage image) - { - this.textureId = GL32.glGenTextures(); - GL32.glBindTexture(GL32.GL_TEXTURE_2D, this.textureId); - GL32.glTexImage2D(GL32.GL_TEXTURE_2D, 0, image.format().glFormat(), image.getWidth(), image.getHeight(), - 0, image.format().glFormat(), GL32.GL_UNSIGNED_BYTE, (ByteBuffer) null); - } - //=========// @@ -53,14 +45,25 @@ public class LightMapWrapper implements ILightMapWrapper public void uploadLightmap(NativeImage image) { int currentBind = GL32.glGetInteger(GL32.GL_TEXTURE_BINDING_2D); - GL32.glBindTexture(GL32.GL_TEXTURE_2D, this.textureId); if (this.textureId == 0) { this.createLightmap(image); } + else + { + GL32.glBindTexture(GL32.GL_TEXTURE_2D, this.textureId); + } image.upload(0, 0, 0, false); GL32.glBindTexture(GL32.GL_TEXTURE_2D, currentBind); } + private void createLightmap(NativeImage image) + { + this.textureId = GL32.glGenTextures(); + GL32.glBindTexture(GL32.GL_TEXTURE_2D, this.textureId); + GL32.glTexImage2D(GL32.GL_TEXTURE_2D, 0, image.format().glFormat(), image.getWidth(), image.getHeight(), + 0, image.format().glFormat(), GL32.GL_UNSIGNED_BYTE, (ByteBuffer) null); + } + @Override public void bind()