From 4ab4dc59e7d64f5b66d2f6a20237f71bbd2256da Mon Sep 17 00:00:00 2001 From: cola98765 Date: Fri, 15 Oct 2021 18:41:58 +0200 Subject: [PATCH] now renders default Skylight as 0 when player is in Skylight 0 situation --- .../bufferBuilding/LodBufferBuilder.java | 12 ++++- .../lodTemplates/AbstractLodTemplate.java | 2 +- .../lodTemplates/CubicLodTemplate.java | 44 +++++++++++++------ .../lodTemplates/DynamicLodTemplate.java | 2 +- .../lodTemplates/TriangularLodTemplate.java | 2 +- .../lod/builders/lodBuilding/LodBuilder.java | 2 +- .../com/seibel/lod/util/DataPointUtil.java | 2 + 7 files changed, 47 insertions(+), 19 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 279b87909..3d93cc76f 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java @@ -31,11 +31,14 @@ import com.seibel.lod.proxy.ClientProxy; import com.seibel.lod.proxy.GlProxy; import com.seibel.lod.render.LodRenderer; import com.seibel.lod.util.*; +import com.seibel.lod.wrappers.MinecraftWrapper; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.world.ClientWorld; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.LightType; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL15C; @@ -59,6 +62,8 @@ import java.util.concurrent.locks.ReentrantLock; */ public class LodBufferBuilder { + private static final MinecraftWrapper mc = MinecraftWrapper.INSTANCE; + /** The thread used to generate new LODs off the main thread. */ public static final ExecutorService mainGenThread = Executors.newSingleThreadExecutor(new LodThreadFactory(LodBufferBuilder.class.getSimpleName() + " - main")); /** The threads used to generate buffers. */ @@ -231,6 +236,9 @@ public class LodBufferBuilder // create the nodeToRenderThreads // //================================// + ClientWorld world = mc.getClientWorld(); + int skyLightPlayer = world.getBrightness(LightType.SKY, playerBlockPos); + for (int xRegion = 0; xRegion < lodDim.getWidth(); xRegion++) { for (int zRegion = 0; zRegion < lodDim.getWidth(); zRegion++) @@ -382,9 +390,9 @@ public class LodBufferBuilder data = lodDim.getData(detailLevel, posX, posZ, verticalIndex); if (DataPointUtil.isVoid(data) || !DataPointUtil.doesItExist(data)) break; - + LodConfig.CLIENT.graphics.lodTemplate.get().template.addLodToBuffer(currentBuffers[bufferIndex], playerBlockPosRounded, data, adjData, - detailLevel, posX, posZ, box, renderer.previousDebugMode, renderer.lightMap, adjShadeDisabled); + detailLevel, posX, posZ, box, renderer.previousDebugMode, renderer.lightMap, adjShadeDisabled, (DataPointUtil.getFlag(data) && skyLightPlayer == 0)); } 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 e9203b342..42429d42e 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); + byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled, boolean caveLight); /** 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/CubicLodTemplate.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/CubicLodTemplate.java index 81faf157e..4581d4778 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) + byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled, boolean caveLight) { if (box == null) return; @@ -61,18 +61,36 @@ public class CubicLodTemplate extends AbstractLodTemplate else color = DataPointUtil.getColor(data); - 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); + 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); + } 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 3145e1705..0b3519aa5 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) + byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled, boolean caveLight) { 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 c84a93dfa..bf3f2cb73 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) + byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap, boolean[] adjShadeDisabled, boolean caveLight) { ClientProxy.LOGGER.error(DynamicLodTemplate.class.getSimpleName() + " is not implemented!"); } diff --git a/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java b/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java index ecbd58745..196a60cae 100644 --- a/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java +++ b/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java @@ -448,7 +448,7 @@ public class LodBuilder // lets just take a guess if (blockPos.getY() >= mc.getClientWorld().getSeaLevel() - 5) { - skyLight = 13; + skyLight = 12; isDefault = 1; } else diff --git a/src/main/java/com/seibel/lod/util/DataPointUtil.java b/src/main/java/com/seibel/lod/util/DataPointUtil.java index 43882d684..1912f20cf 100644 --- a/src/main/java/com/seibel/lod/util/DataPointUtil.java +++ b/src/main/java/com/seibel/lod/util/DataPointUtil.java @@ -108,7 +108,9 @@ public class DataPointUtil dataPoint += (lightBlock & BLOCK_LIGHT_MASK) << BLOCK_LIGHT_SHIFT; dataPoint += (lightSky & SKY_LIGHT_MASK) << SKY_LIGHT_SHIFT; dataPoint += (generationMode & GEN_TYPE_MASK) << GEN_TYPE_SHIFT; + if (flag) dataPoint += FLAG_MASK << FLAG_SHIFT; dataPoint += EXISTENCE_MASK << EXISTENCE_SHIFT; + return dataPoint; }