From 30e796f5bf88df74494aa50ad5d1357e1006d978 Mon Sep 17 00:00:00 2001 From: cola98765 Date: Fri, 15 Oct 2021 23:20:54 +0200 Subject: [PATCH] fixed side lighting --- .../bufferBuilding/LodBufferBuilder.java | 6 ++- .../lodTemplates/AbstractLodTemplate.java | 2 +- .../bufferBuilding/lodTemplates/Box.java | 26 +++++------ .../lodTemplates/CubicLodTemplate.java | 45 ++++++------------- .../lodTemplates/DynamicLodTemplate.java | 2 +- .../lodTemplates/TriangularLodTemplate.java | 2 +- .../com/seibel/lod/util/DataPointUtil.java | 10 +++++ 7 files changed, 41 insertions(+), 52 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java index 3d93cc76f..609c9b5ea 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java @@ -89,6 +89,8 @@ public class LodBufferBuilder /** This boolean indicates that ever buffer need to be regenerated */ public volatile boolean fullRegeneration = false; + public static int skyLightPlayer = 15; + /** * How many buffers there are for the given region.
* This is done because some regions may require more memory than @@ -237,7 +239,7 @@ public class LodBufferBuilder //================================// ClientWorld world = mc.getClientWorld(); - int skyLightPlayer = world.getBrightness(LightType.SKY, playerBlockPos); + skyLightPlayer = world.getBrightness(LightType.SKY, playerBlockPos); for (int xRegion = 0; xRegion < lodDim.getWidth(); xRegion++) { @@ -392,7 +394,7 @@ public class LodBufferBuilder break; LodConfig.CLIENT.graphics.lodTemplate.get().template.addLodToBuffer(currentBuffers[bufferIndex], playerBlockPosRounded, data, adjData, - detailLevel, posX, posZ, box, renderer.previousDebugMode, renderer.lightMap, adjShadeDisabled, (DataPointUtil.getFlag(data) && skyLightPlayer == 0)); + detailLevel, posX, posZ, box, renderer.previousDebugMode, renderer.lightMap, adjShadeDisabled); } diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/AbstractLodTemplate.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/AbstractLodTemplate.java index 42429d42e..e9203b342 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/AbstractLodTemplate.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/AbstractLodTemplate.java @@ -38,7 +38,7 @@ public abstract class AbstractLodTemplate /** Uploads the given LOD to the buffer. */ public abstract void addLodToBuffer(BufferBuilder buffer, BlockPos bufferCenterBlockPos, long data, Map adjData, - byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled, boolean caveLight); + byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled); /** add the given position and color to the buffer */ protected void addPosAndColor(BufferBuilder buffer, diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/Box.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/Box.java index 20753cf64..2a551918a 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/Box.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/Box.java @@ -319,16 +319,13 @@ public class Box //Down direction case singleAdjDataPoint = adjData.get(Direction.DOWN)[0]; if(DataPointUtil.doesItExist(singleAdjDataPoint)) - { - skyLights.get(Direction.DOWN)[0] = (byte) DataPointUtil.getLightSky(singleAdjDataPoint); - - }else - { + skyLights.get(Direction.DOWN)[0] = (byte) DataPointUtil.getLightSkyAlt(singleAdjDataPoint); + else skyLights.get(Direction.DOWN)[0] = skyLights.get(Direction.UP)[0]; - } + //other sided + //TODO clean some similar cases for (Direction direction : ADJ_DIRECTIONS) { - singleAdjDataPoint = 0; if (isCulled(direction)) continue; @@ -339,6 +336,7 @@ public class Box adjDepth.get(direction)[0] = minY; adjHeight.get(direction)[1] = VOID_FACE; adjDepth.get(direction)[1] = VOID_FACE; + skyLights.get(direction)[0] = 15; //in void set full sky light continue; } @@ -374,7 +372,7 @@ public class Box else { adjDepth.get(direction)[faceToDraw] = getMinY(); - skyLights.get(direction)[faceToDraw] = (byte) 0; + skyLights.get(direction)[faceToDraw] = (byte) DataPointUtil.getLightSkyAlt(singleAdjDataPoint); } faceToDraw++; toFinish = false; @@ -404,7 +402,7 @@ public class Box else { adjDepth.get(direction)[faceToDraw] = height; - skyLights.get(direction)[faceToDraw] = (byte) DataPointUtil.getLightSky(singleAdjDataPoint); + skyLights.get(direction)[faceToDraw] = (byte) DataPointUtil.getLightSkyAlt(singleAdjDataPoint); } toFinish = false; faceToDraw++; @@ -415,7 +413,7 @@ public class Box // the adj data intersects the higher part of the current data // we start the creation of a new face adjHeight.get(direction)[faceToDraw] = depth; - //skyLights.get(direction)[faceToDraw] = (byte) DataPointUtil.getLightSky(singleAdjDataPoint); + //skyLights.get(direction)[faceToDraw] = (byte) DataPointUtil.getLightSkyAlt(singleAdjDataPoint); firstFace = false; toFinish = true; toFinishIndex = i + 1; @@ -431,7 +429,7 @@ public class Box } adjDepth.get(direction)[faceToDraw] = height; - skyLights.get(direction)[faceToDraw] = (byte) DataPointUtil.getLightSky(singleAdjDataPoint); + skyLights.get(direction)[faceToDraw] = (byte) DataPointUtil.getLightSkyAlt(singleAdjDataPoint); faceToDraw++; adjHeight.get(direction)[faceToDraw] = depth; firstFace = false; @@ -455,13 +453,9 @@ public class Box { singleAdjDataPoint = dataPoint[toFinishIndex]; if (DataPointUtil.doesItExist(singleAdjDataPoint)) - { - skyLights.get(direction)[faceToDraw] = (byte) DataPointUtil.getLightSky(singleAdjDataPoint); - } + skyLights.get(direction)[faceToDraw] = (byte) DataPointUtil.getLightSkyAlt(singleAdjDataPoint); else - { skyLights.get(direction)[faceToDraw] = skyLights.get(Direction.UP)[0]; - } } faceToDraw++; } diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/CubicLodTemplate.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/CubicLodTemplate.java index 4581d4778..6b5617c6a 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/CubicLodTemplate.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/CubicLodTemplate.java @@ -47,7 +47,7 @@ public class CubicLodTemplate extends AbstractLodTemplate @Override public void addLodToBuffer(BufferBuilder buffer, BlockPos bufferCenterBlockPos, long data, Map adjData, - byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled, boolean caveLight) + byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled) { if (box == null) return; @@ -61,36 +61,19 @@ public class CubicLodTemplate extends AbstractLodTemplate else color = DataPointUtil.getColor(data); - if (caveLight) - { - generateBoundingBox( - box, - DataPointUtil.getHeight(data), - DataPointUtil.getDepth(data), - blockWidth, - posX * blockWidth, 0, posZ * blockWidth, // x, y, z offset - bufferCenterBlockPos, - adjData, - color, - 0, - DataPointUtil.getLightBlock(data), - adjShadeDisabled); - } - else - { - generateBoundingBox( - box, - DataPointUtil.getHeight(data), - DataPointUtil.getDepth(data), - blockWidth, - posX * blockWidth, 0, posZ * blockWidth, // x, y, z offset - bufferCenterBlockPos, - adjData, - color, - DataPointUtil.getLightSky(data), - DataPointUtil.getLightBlock(data), - adjShadeDisabled); - } + + generateBoundingBox( + box, + DataPointUtil.getHeight(data), + DataPointUtil.getDepth(data), + blockWidth, + posX * blockWidth, 0, posZ * blockWidth, // x, y, z offset + bufferCenterBlockPos, + adjData, + color, + DataPointUtil.getLightSkyAlt(data), + DataPointUtil.getLightBlock(data), + adjShadeDisabled); addBoundingBoxToBuffer(buffer, box); } diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/DynamicLodTemplate.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/DynamicLodTemplate.java index 0b3519aa5..3145e1705 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/DynamicLodTemplate.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/DynamicLodTemplate.java @@ -39,7 +39,7 @@ public class DynamicLodTemplate extends AbstractLodTemplate { @Override public void addLodToBuffer(BufferBuilder buffer, BlockPos bufferCenterBlockPos, long data, Map adjData, - byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled, boolean caveLight) + byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled) { ClientProxy.LOGGER.error(DynamicLodTemplate.class.getSimpleName() + " is not implemented!"); } diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/TriangularLodTemplate.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/TriangularLodTemplate.java index bf3f2cb73..c84a93dfa 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/TriangularLodTemplate.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/TriangularLodTemplate.java @@ -37,7 +37,7 @@ public class TriangularLodTemplate extends AbstractLodTemplate { @Override public void addLodToBuffer(BufferBuilder buffer, BlockPos bufferCenterBlockPos, long data, Map adjData, - byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled, boolean caveLight) + byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled) { ClientProxy.LOGGER.error(DynamicLodTemplate.class.getSimpleName() + " is not implemented!"); } diff --git a/src/main/java/com/seibel/lod/util/DataPointUtil.java b/src/main/java/com/seibel/lod/util/DataPointUtil.java index 1912f20cf..891fc37ea 100644 --- a/src/main/java/com/seibel/lod/util/DataPointUtil.java +++ b/src/main/java/com/seibel/lod/util/DataPointUtil.java @@ -3,6 +3,8 @@ package com.seibel.lod.util; import com.seibel.lod.enums.DistanceGenerationMode; import net.minecraft.client.renderer.texture.NativeImage; +import static com.seibel.lod.builders.bufferBuilding.LodBufferBuilder.skyLightPlayer; + public class DataPointUtil { /* @@ -149,6 +151,14 @@ public class DataPointUtil return (int) ((dataPoint >>> SKY_LIGHT_SHIFT) & SKY_LIGHT_MASK); } + public static int getLightSkyAlt(long dataPoint) + { + if (skyLightPlayer == 0 && ((dataPoint >>> FLAG_SHIFT) & FLAG_MASK) == 1) + return 0; + else + return (int) ((dataPoint >>> SKY_LIGHT_SHIFT) & SKY_LIGHT_MASK); + } + public static int getLightBlock(long dataPoint) { return (int) ((dataPoint >>> BLOCK_LIGHT_SHIFT) & BLOCK_LIGHT_MASK);