From d2becd2c03f34352b8c5b902cdc73f5d6f45ad14 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 28 Jun 2025 10:45:36 -0500 Subject: [PATCH] Fix rare fade error when restarting the LodRenderer --- .../core/render/renderer/LodRenderer.java | 3 +++ .../render/renderer/shaders/FadeShader.java | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) 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 dd4eee5c7..d3deefa67 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 @@ -804,6 +804,9 @@ public class LodRenderer if (this.depthTexture != null) this.depthTexture.destroy(); + this.setActiveDepthTextureId(-1); + this.setActiveColorTextureId(-1); + EVENT_LOGGER.info("Renderer Cleanup Complete"); }); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FadeShader.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FadeShader.java index 66c2f075c..fd8227cc1 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FadeShader.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FadeShader.java @@ -155,6 +155,19 @@ public class FadeShader extends AbstractShaderRenderer @Override protected void onRender() { + int depthTextureId = LodRenderer.getActiveDepthTextureId(); + int colorTextureId = LodRenderer.getActiveColorTextureId(); + + if (depthTextureId == -1 + || colorTextureId == -1) + { + // the renderer is currently being re-built and/or inactive, + // we don't need to/can't render fading + return; + } + + + GLMC.glBindFramebuffer(GL32.GL_FRAMEBUFFER, this.frameBuffer); GLMC.disableScissorTest(); GLMC.disableDepthTest(); @@ -165,8 +178,7 @@ public class FadeShader extends AbstractShaderRenderer GL32.glUniform1i(this.uMcDepthTexture, 0); GLMC.glActiveTexture(GL32.GL_TEXTURE1); - // FIXME it's possible for this to return an invalid texture ID if the renderer is being re-built at the same time - GLMC.glBindTexture(LodRenderer.getActiveDepthTextureId()); + GLMC.glBindTexture(depthTextureId); GL32.glUniform1i(this.uDhDepthTexture, 1); GLMC.glActiveTexture(GL32.GL_TEXTURE2); @@ -174,7 +186,7 @@ public class FadeShader extends AbstractShaderRenderer GL32.glUniform1i(this.uCombinedMcDhColorTexture, 2); GLMC.glActiveTexture(GL32.GL_TEXTURE3); - GLMC.glBindTexture(LodRenderer.getActiveColorTextureId()); + GLMC.glBindTexture(colorTextureId); GL32.glUniform1i(this.uDhColorTexture, 3);