attempt to improve the data preperation of render factory
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user