Vertical lod now works (optimization required)

This commit is contained in:
Leonardo
2021-09-14 01:05:41 +02:00
parent e9798ace13
commit 9b216fedad
3 changed files with 27 additions and 15 deletions
@@ -189,19 +189,20 @@ public class LodBuilder
posX = LevelPosUtil.convert((byte) 0, chunk.getPos().x * 16 + startX, detail.detailLevel);
posZ = LevelPosUtil.convert((byte) 0, chunk.getPos().z * 16 + startZ, detail.detailLevel);
long[] data;
long[] dataToMerge;
long[][] dataToMerge;
//data = ThreadMapUtil.getSingleAddDataArray();
dataToMerge = createSingleDataToMerge(detail, chunk, config, startX, startZ, endX, endZ);
long[][] dataToMerge2 = new long[dataToMerge.length][];
//dataToMerge = createSingleDataToMerge(detail, chunk, config, startX, startZ, endX, endZ);
/*long[][] dataToMerge2 = new long[dataToMerge.length][];
for (int index = 0; index < dataToMerge.length; index++)
{
dataToMerge2[index] = new long[]{dataToMerge[index]};
}
}*/
//data[0] = DataPointUtil.mergeSingleData(dataToMerge);
//dataToMerge = createVerticalDataToMerge(detail, chunk, config, startX, startZ, endX, endZ);
data = DataPointUtil.mergeVerticalData(dataToMerge2);
dataToMerge = createVerticalDataToMerge(detail, chunk, config, startX, startZ, endX, endZ);
data = DataPointUtil.mergeVerticalData(dataToMerge);
if(data.length == 0 || data == null)
data = new long[]{DataPointUtil.EMPTY_DATA};
boolean isServer = config.distanceGenerationMode == DistanceGenerationMode.SERVER;
lodDim.addData(detailLevel,
posX,
@@ -209,6 +210,7 @@ public class LodBuilder
data,
false,
isServer);
}
lodDim.updateData(LodUtil.CHUNK_DETAIL_LEVEL, chunk.getPos().x, chunk.getPos().z);
} catch (Exception e)
@@ -42,7 +42,7 @@ public class VerticalLevelContainer implements LevelContainer
public boolean doesItExist(int posX, int posZ){
long[] data = getData(posX,posZ);
return DataPointUtil.doesItExist(data[0]);
return (data != null && DataPointUtil.doesItExist(data[0]));
}
public VerticalLevelContainer(String inputString)
@@ -105,9 +105,9 @@ public class DataPointUtil
return (short) ((dataPoint >>> BLUE_SHIFT) & BLUE_MASK);
}
public static byte getLightValue(long dataPoint)
public static int getLightValue(long dataPoint)
{
return (byte) ((dataPoint >>> LIGHT_SHIFT) & LIGHT_MASK);
return (int) ((dataPoint >>> LIGHT_SHIFT) & LIGHT_MASK);
}
public static byte getGenerationMode(long dataPoint)
@@ -128,15 +128,15 @@ public class DataPointUtil
public static int getColor(long dataPoint)
{
return (int) ((dataPoint >>> COLOR_SHIFT) & COLOR_MASK);
return (int) (dataPoint >>> COLOR_SHIFT);
}
public static int getLightColor(long dataPoint)
{
int lightBlock = getLightValue(dataPoint);
int red = Math.min(getRed(dataPoint) + lightBlock * 8, 255);
int green = Math.min(getGreen(dataPoint) + lightBlock * 8, 255);
int blue = Math.min(getBlue(dataPoint) + lightBlock * 4, 255);
int red = LodUtil.clamp(0, getRed(dataPoint) + lightBlock * 8, 255);
int green = LodUtil.clamp(0, getGreen(dataPoint) + lightBlock * 8, 255);
int blue = LodUtil.clamp(0, getBlue(dataPoint) + lightBlock * 4, 255);
return ColorUtil.rgbToInt(red, green, blue);
}
@@ -147,11 +147,21 @@ public class DataPointUtil
s.append(" ");
s.append(getDepth(dataPoint));
s.append(" ");
s.append(getAlpha(dataPoint));
s.append(" ");
s.append(getRed(dataPoint));
s.append(" ");
s.append(getBlue(dataPoint));
s.append(" ");
s.append(getGreen(dataPoint));
s.append(" ");
s.append(getLightValue(dataPoint));
s.append(" ");
s.append(getGenerationMode(dataPoint));
s.append(" ");
s.append(isItVoid(dataPoint));
s.append(" ");
s.append(doesItExist(dataPoint));
s.append('\n');
return s.toString();
}
@@ -302,7 +312,7 @@ public class DataPointUtil
if ((depth <= getDepth(singleData) && getDepth(singleData) <= height)
|| (depth <= getHeight(singleData) && getHeight(singleData) <= height))
{
singleDataToMerge[dataIndex] = singleData;
singleDataToMerge[index] = singleData;
break;
}
}