Fixed chunkPos being created multiple time in the buffer

This commit is contained in:
Leonardo
2021-09-01 17:20:52 +02:00
parent 4e249e943a
commit e3dfe658f5
3 changed files with 86 additions and 25 deletions
@@ -216,6 +216,9 @@ public class LodBufferBuilder
int posX;
int posZ;
byte detailLevel;
int chunkXdist;
int chunkZdist;
short gameChunkRenderDistance = (short) (renderer.vanillaRenderedChunks.length/2 - 1);
for (LevelPos posToRender : nodeToRender.keySet())
{
if (!nodeToRender.get(posToRender).booleanValue())
@@ -225,10 +228,14 @@ public class LodBufferBuilder
}
nodeToRender.get(posToRender).setFalse();
// skip any chunks that Minecraft is going to render
if (renderer.vanillaRenderedChunks.contains(posToRender.getChunkPos()))
chunkXdist = posToRender.getChunkPosX() - playerChunkPos.x;
chunkZdist = posToRender.getChunkPosZ() - playerChunkPos.z;
if(gameChunkRenderDistance >= Math.abs(chunkXdist) && gameChunkRenderDistance >= Math.abs(chunkZdist))
{
continue;
if (renderer.vanillaRenderedChunks[chunkXdist + gameChunkRenderDistance][chunkZdist + gameChunkRenderDistance])
{
continue;
}
}
posX = posToRender.posX;
posZ = posToRender.posZ;
@@ -237,10 +244,6 @@ public class LodBufferBuilder
LevelPos chunkPos = posToRender.getConvertedLevelPos(LodUtil.CHUNK_DETAIL_LEVEL);
// skip any chunks that Minecraft is going to render
if (renderer.vanillaRenderedChunks.contains(new ChunkPos(chunkPos.posX, chunkPos.posZ)))
{
continue;
}
try
{
@@ -252,17 +255,43 @@ public class LodBufferBuilder
for (int x : new int[]{0, 1})
{
posToRender.changeParameters(detailLevel, posX + x * 2 - 1, posZ);
if (!renderer.vanillaRenderedChunks.contains(posToRender.getChunkPos())
&& (nodeToRender.containsKey(posToRender) || disableFix))
adjData[0][x] = lodDim.getData(posToRender);
chunkXdist = posToRender.getChunkPosX() - playerChunkPos.x;
chunkZdist = posToRender.getChunkPosZ() - playerChunkPos.z;
if(gameChunkRenderDistance >= Math.abs(chunkXdist) && gameChunkRenderDistance >= Math.abs(chunkZdist))
{
if (!renderer.vanillaRenderedChunks[chunkXdist + gameChunkRenderDistance][chunkZdist + gameChunkRenderDistance]
&& (nodeToRender.containsKey(posToRender) || disableFix))
{
adjData[0][x] = lodDim.getData(posToRender);
}
}else{
if (nodeToRender.containsKey(posToRender) || disableFix)
{
adjData[0][x] = lodDim.getData(posToRender);
}
}
}
for (int z : new int[]{0, 1})
{
posToRender.changeParameters(detailLevel, posX, posZ + z * 2 - 1);
if (!renderer.vanillaRenderedChunks.contains(posToRender.getChunkPos())
&& (nodeToRender.containsKey(posToRender) || disableFix))
adjData[1][z] = lodDim.getData(posToRender);
chunkXdist = posToRender.getChunkPosX() - playerChunkPos.x;
chunkZdist = posToRender.getChunkPosZ() - playerChunkPos.z;
if(gameChunkRenderDistance >= Math.abs(chunkXdist) && gameChunkRenderDistance >= Math.abs(chunkZdist))
{
if (!renderer.vanillaRenderedChunks[chunkXdist + gameChunkRenderDistance][chunkZdist + gameChunkRenderDistance]
&& (nodeToRender.containsKey(posToRender) || disableFix))
{
adjData[1][z] = lodDim.getData(posToRender);
}
}else{
if (nodeToRender.containsKey(posToRender) || disableFix)
{
adjData[1][z] = lodDim.getData(posToRender);
}
}
}
posToRender.changeParameters(detailLevel, posX, posZ);