From b09b9d1b6fa9a6519e60fd00fbe2d603227ea244 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 24 Oct 2024 22:02:35 -0500 Subject: [PATCH] Fix cloud colors not updating --- .../renderer/generic/CloudRenderHandler.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/CloudRenderHandler.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/CloudRenderHandler.java index a0c06d795..14ad41a3c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/CloudRenderHandler.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/CloudRenderHandler.java @@ -367,20 +367,31 @@ public class CloudRenderHandler && boxGroup.isActive()) { // cloud color changes based on the time of day and weather so we need to get it from the level - Color cloudColor = this.level.getClientLevelWrapper().getCloudColor(renderParam.partialTicks); + Color newCloudColor = this.level.getClientLevelWrapper().getCloudColor(renderParam.partialTicks); - // all boxes should have the same color, so we can get the previous color - // using the first box + + // all boxes should have the same color, so we can get their current color + // via the first box DhApiRenderableBox firstBox = boxGroup.get(0); - Color currentColor = firstBox.color; + Color currentBoxColor = firstBox.color; - // only trigger an update if the color changed - if (!cloudColor.equals(currentColor)) + // update the boxes if their color should be changed + if (!newCloudColor.equals(currentBoxColor)) { + // Note: cloud instances may share boxes + // because of that this method may only need to be called once per all clouds for (DhApiRenderableBox box : boxGroup) { - box.color = cloudColor; + box.color = newCloudColor; } + } + + + // trigger an update if this cloud section has a different color + // TODO merge all cloud VBOs so we only need to trigger this once + if (!cloudParams.previousColor.equals(newCloudColor)) + { + cloudParams.previousColor = newCloudColor; boxGroup.triggerBoxChange(); } @@ -535,6 +546,9 @@ public class CloudRenderHandler public long lastFrameTime = System.currentTimeMillis(); + /** used so we can trigger a VBO update when necessary */ + public Color previousColor = Color.WHITE; + // constructor //