Fixed a bug in posToGenerate and the buffer now reset on too far away
This commit is contained in:
+4
-2
@@ -219,6 +219,7 @@ public class LodBufferBuilderFactory
|
||||
} else {
|
||||
fullRegen = allBuffersRequireReset || frontBufferRequireReset;
|
||||
}
|
||||
|
||||
if (!fullRegen && !partialRegen) return false;
|
||||
|
||||
generatingBuffers = true;
|
||||
@@ -257,9 +258,10 @@ public class LodBufferBuilderFactory
|
||||
int vboX;
|
||||
int vboY;
|
||||
int vboZ;
|
||||
|
||||
boolean tooFar = Math.abs(buildableCenterBlockX-playerX)+Math.abs(buildableCenterBlockZ-playerZ)>100_000;
|
||||
|
||||
|
||||
if (fullRegen || buildableBuffers==null || buildableVbos==null
|
||||
if (fullRegen || tooFar || buildableBuffers==null || buildableVbos==null
|
||||
|| setsToRender==null || vertexOptimizerCache==null) {
|
||||
renderRange = lodDim.getWidth()/2; //get lodDim half width
|
||||
buildableBuffers = new MovableGridList<LodBufferBuilder[]>(renderRange, playerRegionX, playerRegionZ);
|
||||
|
||||
@@ -523,11 +523,13 @@ public class LodDimension
|
||||
PosToGenerateContainer posToGenerate;
|
||||
posToGenerate = new PosToGenerateContainer((byte) 8, maxDataToGenerate, playerBlockPosX, playerBlockPosZ);
|
||||
iterateByDistance((int x, int z) -> {
|
||||
if (posToGenerate.isFull()) return;
|
||||
boolean isCloseRange = (Math.abs(x-halfWidth)+Math.abs(z-halfWidth)<2);
|
||||
if (!isCloseRange && posToGenerate.isFull()) return;
|
||||
//All of this is handled directly by the region, which scan every pos from top to bottom of the quad tree
|
||||
LodRegion lodRegion = regions[x][z];
|
||||
if (lodRegion != null)
|
||||
lodRegion.getPosToGenerate(posToGenerate, playerBlockPosX, playerBlockPosZ, priority, (Math.abs(x)+Math.abs(z)<2));
|
||||
lodRegion.getPosToGenerate(posToGenerate, playerBlockPosX, playerBlockPosZ, priority,
|
||||
isCloseRange);
|
||||
});
|
||||
return posToGenerate;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user