Use OpenGL BufferStorage to improve upload performance
I need to change how the memory is determined, right now they fill to the maximum amount; which is very bad and only for testing.
This commit is contained in:
@@ -15,7 +15,8 @@ public class DetailDistanceUtil
|
||||
private static int maxDetail = LodUtil.REGION_DETAIL_LEVEL + 1;
|
||||
private static int minDistance = 0;
|
||||
private static int maxDistance = LodConfig.CLIENT.graphics.lodChunkRenderDistance.get() * 16 * 2;
|
||||
|
||||
|
||||
|
||||
private static int[] maxVerticalData = {
|
||||
4,
|
||||
4,
|
||||
@@ -28,8 +29,8 @@ public class DetailDistanceUtil
|
||||
1,
|
||||
1,
|
||||
1};
|
||||
|
||||
|
||||
|
||||
|
||||
private static HorizontalResolution[] lodGenDetails = {
|
||||
HorizontalResolution.BLOCK,
|
||||
HorizontalResolution.TWO_BLOCKS,
|
||||
@@ -42,84 +43,84 @@ public class DetailDistanceUtil
|
||||
HorizontalResolution.CHUNK,
|
||||
HorizontalResolution.CHUNK,
|
||||
HorizontalResolution.CHUNK};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static void updateSettings(){
|
||||
minGenDetail = LodConfig.CLIENT.worldGenerator.generationResolution.get().detailLevel;
|
||||
minDrawDetail = Math.max(LodConfig.CLIENT.graphics.drawResolution.get().detailLevel,LodConfig.CLIENT.worldGenerator.generationResolution.get().detailLevel);
|
||||
maxDistance = LodConfig.CLIENT.graphics.lodChunkRenderDistance.get() * 16 * 8;
|
||||
}
|
||||
|
||||
|
||||
public static int baseDistanceFunction(int detail)
|
||||
{
|
||||
if (detail <= minGenDetail)
|
||||
return minDistance;
|
||||
if (detail >= maxDetail)
|
||||
return maxDistance;
|
||||
|
||||
|
||||
int distanceUnit = LodConfig.CLIENT.worldGenerator.horizontalScale.get().distanceUnit;
|
||||
switch (LodConfig.CLIENT.worldGenerator.horizontalQuality.get()){
|
||||
|
||||
case LINEAR:;
|
||||
return (detail * distanceUnit);
|
||||
default:
|
||||
double base = LodConfig.CLIENT.worldGenerator.horizontalQuality.get().quadraticBase;
|
||||
return (int) (Math.pow(base, detail) * distanceUnit);
|
||||
|
||||
case LINEAR:;
|
||||
return (detail * distanceUnit);
|
||||
default:
|
||||
double base = LodConfig.CLIENT.worldGenerator.horizontalQuality.get().quadraticBase;
|
||||
return (int) (Math.pow(base, detail) * distanceUnit);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static int getDrawDistanceFromDetail(int detail)
|
||||
{
|
||||
return baseDistanceFunction(detail);
|
||||
}
|
||||
|
||||
|
||||
public static byte baseInverseFunction(int distance, int minDetail)
|
||||
{
|
||||
|
||||
|
||||
int detail = 0;
|
||||
if (distance == 0)
|
||||
return (byte) minDetail;
|
||||
int distanceUnit = LodConfig.CLIENT.worldGenerator.horizontalScale.get().distanceUnit;
|
||||
switch (LodConfig.CLIENT.worldGenerator.horizontalQuality.get()){
|
||||
case LINEAR:
|
||||
detail = (byte) Math.floorDiv(distance, distanceUnit);
|
||||
break;
|
||||
default:
|
||||
double base = LodConfig.CLIENT.worldGenerator.horizontalQuality.get().quadraticBase;
|
||||
double logBase = Math.log(base);
|
||||
detail = (byte) (Math.log(Math.floorDiv(distance, distanceUnit))/logBase);
|
||||
break;
|
||||
case LINEAR:
|
||||
detail = (byte) Math.floorDiv(distance, distanceUnit);
|
||||
break;
|
||||
default:
|
||||
double base = LodConfig.CLIENT.worldGenerator.horizontalQuality.get().quadraticBase;
|
||||
double logBase = Math.log(base);
|
||||
detail = (byte) (Math.log(Math.floorDiv(distance, distanceUnit))/logBase);
|
||||
break;
|
||||
}
|
||||
return (byte) LodUtil.clamp(minDetail, detail, maxDetail-1);
|
||||
}
|
||||
|
||||
|
||||
public static byte getDrawDetailFromDistance(int distance)
|
||||
{
|
||||
return baseInverseFunction(distance, minDrawDetail);
|
||||
}
|
||||
|
||||
|
||||
public static byte getGenerationDetailFromDistance(int distance)
|
||||
{
|
||||
return baseInverseFunction((int) (distance * genMultiplier), minGenDetail);
|
||||
}
|
||||
|
||||
|
||||
public static byte getTreeCutDetailFromDistance(int distance)
|
||||
{
|
||||
return baseInverseFunction((int) (distance * treeCutMultiplier), minGenDetail);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static byte getTreeGenDetailFromDistance(int distance)
|
||||
{
|
||||
return baseInverseFunction((int) (distance * treeGenMultiplier), minGenDetail);
|
||||
}
|
||||
|
||||
|
||||
public static DistanceGenerationMode getDistanceGenerationMode(int detail)
|
||||
{
|
||||
return LodConfig.CLIENT.worldGenerator.distanceGenerationMode.get();
|
||||
}
|
||||
|
||||
|
||||
public static byte getLodDrawDetail(int detail)
|
||||
{
|
||||
if (detail < minDrawDetail)
|
||||
@@ -128,7 +129,8 @@ public class DetailDistanceUtil
|
||||
return getLodGenDetail(minDrawDetail).detailLevel;
|
||||
else
|
||||
return (byte) minDrawDetail;
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
if(LodConfig.CLIENT.graphics.alwaysDrawAtMaxQuality.get())
|
||||
return getLodGenDetail(detail).detailLevel;
|
||||
@@ -136,7 +138,7 @@ public class DetailDistanceUtil
|
||||
return (byte) detail;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static HorizontalResolution getLodGenDetail(int detail)
|
||||
{
|
||||
if (detail < minGenDetail)
|
||||
@@ -147,8 +149,8 @@ public class DetailDistanceUtil
|
||||
return lodGenDetails[detail];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static byte getCutLodDetail(int detail)
|
||||
{
|
||||
if (detail < minGenDetail)
|
||||
@@ -162,12 +164,12 @@ public class DetailDistanceUtil
|
||||
return lodGenDetails[detail].detailLevel;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static int getMaxVerticalData(int detail)
|
||||
{
|
||||
if(LodConfig.CLIENT.worldGenerator.lodQualityMode.get() == VerticalQuality.HEIGHTMAP)
|
||||
return 1;
|
||||
return maxVerticalData[LodUtil.clamp(minGenDetail, detail, LodUtil.REGION_DETAIL_LEVEL)];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user