added regen for the lightmap
This commit is contained in:
@@ -307,7 +307,7 @@ public class LodBufferBuilder
|
||||
}
|
||||
}
|
||||
LodConfig.CLIENT.graphics.lodTemplate.get().template.addLodToBuffer(currentBuffer, playerBlockPosRounded, dataPoint, adjData,
|
||||
detailLevel, posX, posZ, boxCache[xR][zR],renderer.previousDebugMode, lodDim.dimension);
|
||||
detailLevel, posX, posZ, boxCache[xR][zR],renderer.previousDebugMode, renderer.lightMap);
|
||||
}
|
||||
|
||||
} else if (region.getLodQualityMode() == LodQualityMode.MULTI_LOD)
|
||||
@@ -318,7 +318,7 @@ public class LodBufferBuilder
|
||||
if (!DataPointUtil.isItVoid(dataPoint) && DataPointUtil.doesItExist(dataPoint))
|
||||
{
|
||||
LodConfig.CLIENT.graphics.lodTemplate.get().template.addLodToBuffer(currentBuffer, playerBlockPosRounded, dataPoint, adjData,
|
||||
detailLevel, posX, posZ, boxCache[xR][zR], renderer.previousDebugMode, lodDim.dimension);
|
||||
detailLevel, posX, posZ, boxCache[xR][zR], renderer.previousDebugMode, renderer.lightMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -706,7 +706,8 @@ public class LodBuilder
|
||||
} else if (blockState.getBlock().equals(Blocks.TWISTING_VINES)
|
||||
|| blockState.equals(Blocks.TWISTING_VINES_PLANT)
|
||||
|| blockState == Blocks.WARPED_ROOTS.defaultBlockState()
|
||||
|| blockState == Blocks.WARPED_FUNGUS.defaultBlockState())
|
||||
|| blockState == Blocks.WARPED_FUNGUS.defaultBlockState()
|
||||
|| blockState == Blocks.NETHER_SPROUTS.defaultBlockState())
|
||||
{
|
||||
colorInt = Blocks.WARPED_NYLIUM.defaultMaterialColor().col;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ package com.seibel.lod.builders.lodTemplates;
|
||||
import com.seibel.lod.enums.DebugMode;
|
||||
|
||||
import net.minecraft.client.renderer.BufferBuilder;
|
||||
import net.minecraft.client.renderer.texture.NativeImage;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.DimensionType;
|
||||
@@ -36,7 +37,7 @@ public abstract class AbstractLodTemplate
|
||||
|
||||
|
||||
public abstract void addLodToBuffer(BufferBuilder buffer, BlockPos bufferCenterBlockPos, long data, long[] adjData,
|
||||
byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, DimensionType dimensionType);
|
||||
byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap);
|
||||
|
||||
/**
|
||||
* add the given position and color to the buffer
|
||||
|
||||
@@ -29,10 +29,13 @@ import com.seibel.lod.wrappers.MinecraftWrapper;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.BufferBuilder;
|
||||
import net.minecraft.client.renderer.LightTexture;
|
||||
import net.minecraft.client.renderer.texture.NativeImage;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.DimensionType;
|
||||
|
||||
import java.lang.annotation.Native;
|
||||
|
||||
/**
|
||||
* Builds LODs as rectangular prisms.
|
||||
*
|
||||
@@ -50,7 +53,7 @@ public class CubicLodTemplate extends AbstractLodTemplate
|
||||
|
||||
@Override
|
||||
public void addLodToBuffer(BufferBuilder buffer, BlockPos bufferCenterBlockPos, long data, long[] adjData,
|
||||
byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, DimensionType dimensionType)
|
||||
byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap)
|
||||
{
|
||||
int width = 1 << detailLevel;
|
||||
|
||||
@@ -65,11 +68,7 @@ public class CubicLodTemplate extends AbstractLodTemplate
|
||||
posZ * width,
|
||||
bufferCenterBlockPos);
|
||||
int color;
|
||||
|
||||
boolean hasSkyLight = dimensionType.hasSkyLight();
|
||||
boolean hasRoof = dimensionType.hasCeiling();
|
||||
boolean isDay = MinecraftWrapper.INSTANCE.getPlayer().level.getDayTime() < 13000;
|
||||
color = DataPointUtil.getLightColor(data, (hasRoof || hasSkyLight), isDay);
|
||||
color = DataPointUtil.getLightColor(data,lightMap);
|
||||
|
||||
//color = DataPointUtil.getColor(data);
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ package com.seibel.lod.builders.lodTemplates;
|
||||
import com.seibel.lod.enums.DebugMode;
|
||||
|
||||
import net.minecraft.client.renderer.BufferBuilder;
|
||||
import net.minecraft.client.renderer.texture.NativeImage;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.DimensionType;
|
||||
|
||||
@@ -36,7 +37,7 @@ public class DynamicLodTemplate extends AbstractLodTemplate
|
||||
{
|
||||
@Override
|
||||
public void addLodToBuffer(BufferBuilder buffer, BlockPos bufferCenterBlockPos, long data, long[] adjData,
|
||||
byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, DimensionType dimensionType)
|
||||
byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap)
|
||||
{
|
||||
System.err.println("DynamicLodTemplate not implemented!");
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ package com.seibel.lod.builders.lodTemplates;
|
||||
import com.seibel.lod.enums.DebugMode;
|
||||
|
||||
import net.minecraft.client.renderer.BufferBuilder;
|
||||
import net.minecraft.client.renderer.texture.NativeImage;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.DimensionType;
|
||||
|
||||
@@ -34,7 +35,7 @@ public class TriangularLodTemplate extends AbstractLodTemplate
|
||||
{
|
||||
@Override
|
||||
public void addLodToBuffer(BufferBuilder buffer, BlockPos bufferCenterBlockPos, long data, long[] adjData,
|
||||
byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, DimensionType dimensionType)
|
||||
byte detailLevel, int posX, int posZ, Box box, DebugMode debugging, NativeImage lightMap)
|
||||
{
|
||||
System.err.println("DynamicLodTemplate not implemented!");
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.nio.FloatBuffer;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
import net.minecraft.client.renderer.texture.NativeImage;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL15;
|
||||
import org.lwjgl.opengl.GL15C;
|
||||
@@ -123,6 +124,9 @@ public class LodRenderer
|
||||
* This is used to determine if the LODs should be regenerated
|
||||
*/
|
||||
private int[] previousPos = new int[]{0,0,0};
|
||||
public NativeImage lightMap = null;
|
||||
private long prevDayTime = 0;
|
||||
private double prevBrightness = 0;
|
||||
private int prevRenderDistance = 0;
|
||||
private long prevPlayerPosTime = 0;
|
||||
private long prevVanillaChunkTime = 0;
|
||||
@@ -854,6 +858,15 @@ public class LodRenderer
|
||||
prevChunkTime = newTime;
|
||||
}
|
||||
|
||||
// check if there is any newly generated terrain to show
|
||||
if (mc.getWorld().getDayTime() - prevDayTime > 1000 || mc.getOptions().gamma != prevBrightness || lightMap == null)
|
||||
{
|
||||
fullRegen = true;
|
||||
lightMap = mc.getCurrentLightMap();
|
||||
prevBrightness = mc.getOptions().gamma;
|
||||
prevDayTime = mc.getWorld().getDayTime();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -94,6 +94,21 @@ public class ColorUtil
|
||||
}
|
||||
public static int multiplyRGBcolors(int color1, int color2)
|
||||
{
|
||||
return (((getAlpha(color1) * getAlpha(color2)) << 16) & 0xFF000000) | (((getRed(color1) * getRed(color2)) << 8) & 0xFF0000) | ((getGreen(color1) * getGreen(color2)) & 0xFF00) | (((getBlue(color1) * getBlue(color2)) >> 8) & 0xFF);
|
||||
/**TODO FIX the alpha*/
|
||||
return 0xFF000000 | (((getRed(color1) * getRed(color2)) << 8) & 0xFF0000) | ((getGreen(color1) * getGreen(color2)) & 0xFF00) | (((getBlue(color1) * getBlue(color2)) >> 8) & 0xFF);
|
||||
}
|
||||
|
||||
|
||||
public static String toString(int color)
|
||||
{
|
||||
StringBuilder s = new StringBuilder();
|
||||
s.append(Integer.toHexString(getAlpha(color)));
|
||||
s.append(" ");
|
||||
s.append(Integer.toHexString(getRed(color)));
|
||||
s.append(" ");
|
||||
s.append(Integer.toHexString(getGreen(color)));
|
||||
s.append(" ");
|
||||
s.append(Integer.toHexString(getBlue(color)));
|
||||
return s.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,12 +176,10 @@ public class DataPointUtil
|
||||
return (int) (dataPoint >>> COLOR_SHIFT);
|
||||
}
|
||||
|
||||
public static int getLightColor(long dataPoint, boolean roof, boolean day)
|
||||
public static int getLightColor(long dataPoint, NativeImage lightMap)
|
||||
{
|
||||
int lightBlock = getLightBlock(dataPoint);
|
||||
int lightSky = getLightSky(dataPoint);
|
||||
|
||||
NativeImage lightMap = MinecraftWrapper.INSTANCE.getCurrentLightMap();
|
||||
/**TODO ALL of this should be dimension dependent and lightMap dependent*/
|
||||
int color = lightMap.getPixelRGBA(lightBlock, lightSky);
|
||||
int red = ColorUtil.getBlue(color);
|
||||
|
||||
Reference in New Issue
Block a user