attempt to improve the data preperation of render factory

This commit is contained in:
mcrcortex
2025-06-10 20:37:34 +10:00
parent fa42ad5a03
commit 6398164d42

View File

@@ -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;