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 dc22ae4c2..4933e46c7 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 @@ -58,7 +58,7 @@ public class CloudRenderHandler /** measured in blocks */ private static final int CLOUD_BOX_THICKNESS = 32; - private final IDhApiRenderableBoxGroup[][] boxGroupByOffset; + private final IDhApiRenderableBoxGroup[][] boxGroupByOffset = new IDhApiRenderableBoxGroup[3][3]; private final IDhLevel level; private float moveSpeedInBlocksPerSecond = 3.0f; @@ -73,6 +73,17 @@ public class CloudRenderHandler { this.level = level; + if (!renderer.getUseInstancedRendering()) + { + LOGGER.warn("Instanced rendering unavailable, cloud rendering disabled."); + } + + + + + //=======================// + // get the cloud texture // + //=======================// // default to a single empty slot in case the texture is broken boolean[][] cloudLocations = new boolean[1][1]; @@ -97,6 +108,10 @@ public class CloudRenderHandler + //===================// + // parse the texture // + //===================// + int textureWidth = cloudLocations.length; ArrayList boxList = new ArrayList<>(512); for (int x = 0; x < textureWidth; x ++) @@ -131,6 +146,11 @@ public class CloudRenderHandler } + + //========================// + // create the renderables // + //========================// + // slightly lighter shading than the default DhApiRenderableBoxGroupShading cloudShading = DhApiRenderableBoxGroupShading.getUnshaded(); cloudShading.north = cloudShading.south = 0.9f; @@ -138,7 +158,7 @@ public class CloudRenderHandler cloudShading.top = 1.0f; cloudShading.bottom = 0.7f; - this.boxGroupByOffset = new IDhApiRenderableBoxGroup[3][3]; + // 3x3 area so we clouds should always be overhead for (int x = -1; x <= 1; x++) { for (int z = -1; z <= 1; z++) @@ -151,16 +171,20 @@ public class CloudRenderHandler boxGroup.setSsaoEnabled(false); boxGroup.setShading(cloudShading); - CloudParams offset = new CloudParams(textureWidth, x, z); - boxGroup.setPreRenderFunc((renderParam) -> this.preRender(offset)); + CloudParams params = new CloudParams(textureWidth, x, z); + boxGroup.setPreRenderFunc((renderParam) -> this.preRender(params)); - renderer.add(boxGroup); + // we only stop before adding to the renderer to prevent accidental issues with null pointers and such + if (renderer.getUseInstancedRendering()) + { + renderer.add(boxGroup); + } this.boxGroupByOffset[x+1][z+1] = boxGroup; } } } - public void preRender(CloudParams clouds) + private void preRender(CloudParams clouds) { IDhApiRenderableBoxGroup boxGroup = this.boxGroupByOffset[clouds.instanceOffsetX+1][clouds.instanceOffsetZ+1]; @@ -229,7 +253,7 @@ public class CloudRenderHandler // texture handling // //==================// - public static boolean[][] getCloudsFromTexture() throws FileNotFoundException, IOException + private static boolean[][] getCloudsFromTexture() throws FileNotFoundException, IOException { final ClassLoader loader = Thread.currentThread().getContextClassLoader(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/GenericObjectRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/GenericObjectRenderer.java index b8ef144c1..090329588 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/GenericObjectRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/generic/GenericObjectRenderer.java @@ -625,6 +625,13 @@ public class GenericObjectRenderer implements IDhApiCustomRenderRegister + //=========// + // getters // + //=========// + + public boolean getUseInstancedRendering() { return this.useInstancedRendering; } + + //=========// // F3 menu //