diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/building/RenderDataFactory.java b/src/main/java/me/cortex/voxy/client/core/rendering/building/RenderDataFactory.java index d1f3b40f..eb2e6d3b 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/building/RenderDataFactory.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/building/RenderDataFactory.java @@ -210,12 +210,12 @@ public class RenderDataFactory { private int prepareSectionData(final long[] rawSectionData) { final var sectionData = this.sectionData; final var rawModelIds = this.modelMan._unsafeRawAccess(); - int opaque = 0; - int notEmpty = 0; - int pureFluid = 0; - int partialFluid = 0; + long opaque = 0; + long notEmpty = 0; + long pureFluid = 0; + long partialFluid = 0; - int neighborAcquireMsk = 0;//-+x, -+y, -+Z + int neighborAcquireMsk = 0;//-+x, -+z, -+y for (int i = 0; i < 32*32*32;) { long block = rawSectionData[i];//Get the block mapping if (Mapper.isAir(block)) {//If it is air, just emit lighting @@ -231,7 +231,7 @@ public class RenderDataFactory { sectionData[i * 2] = packPartialQuadData(modelId, block, modelMetadata); sectionData[i * 2 + 1] = modelMetadata; - int msk = 1 << (i & 31); + long msk = 1L << (i & 63); opaque |= ModelQueries.isFullyOpaque(modelMetadata) ? msk : 0; notEmpty |= modelId != 0 ? msk : 0; pureFluid |= ModelQueries.isFluid(modelMetadata) ? msk : 0; @@ -241,21 +241,28 @@ public class RenderDataFactory { //Do increment here i++; - if ((i & 31) == 0 && notEmpty != 0) { - this.opaqueMasks[(i >> 5) - 1] = opaque; - this.nonOpaqueMasks[(i >> 5) - 1] = (notEmpty^opaque)&~pureFluid; - this.fluidMasks[(i >> 5) - 1] = pureFluid|partialFluid; + if ((i & 63) == 0 && notEmpty != 0) { + long nonOpaque = (notEmpty^opaque)&~pureFluid; + long fluid = pureFluid|partialFluid; + this.opaqueMasks[(i >> 5) - 2] = (int) opaque; + this.opaqueMasks[(i >> 5) - 1] = (int) (opaque>>>32); + this.nonOpaqueMasks[(i >> 5) - 2] = (int) nonOpaque; + this.nonOpaqueMasks[(i >> 5) - 1] = (int) (nonOpaque>>>32); + this.fluidMasks[(i >> 5) - 2] = (int) fluid; + this.fluidMasks[(i >> 5) - 1] = (int) (fluid>>>32); + + int packedEmpty = (int) ((notEmpty>>>32)|notEmpty); int neighborMsk = 0; //-+x - neighborMsk |= notEmpty&1;//-x - neighborMsk |= (notEmpty>>>30)&0b10;//+x + neighborMsk |= packedEmpty&1;//-x + neighborMsk |= (packedEmpty>>>30)&0b10;//+x //notEmpty = (notEmpty != 0)?1:0; - neighborMsk |= (((i - 1) >> 10) == 0) ? 0b100 : 0;//-y - neighborMsk |= (((i - 1) >> 10) == 31) ? 0b1000 : 0;//+y - neighborMsk |= ((((i - 1) >> 5) & 0x1F) == 0) ? 0b10000 : 0;//-z - neighborMsk |= ((((i - 1) >> 5) & 0x1F) == 31) ? 0b100000 : 0;//+z + neighborMsk |= ((((i - 1) >> 10) == 0) ? 0b100 : 0)*(packedEmpty!=0?1:0);//-y + neighborMsk |= ((((i - 1) >> 10) == 31) ? 0b1000 : 0)*(packedEmpty!=0?1:0);//+y + neighborMsk |= (((((i - 33) >> 5) & 0x1F) == 0) ? 0b10000 : 0)*(((int)notEmpty)!=0?1:0);//-z + neighborMsk |= (((((i - 1) >> 5) & 0x1F) == 31) ? 0b100000 : 0)*((notEmpty>>>32)!=0?1:0);//+z neighborAcquireMsk |= neighborMsk;