Add a experimental threaded chunk compiler.

remove-fringelands
mckuhei 2 years ago
parent 9c16f06540
commit 080d82c3db

@ -0,0 +1,41 @@
package net.minecraft.src;
import java.util.Queue;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import net.minecraft.client.Minecraft;
public class ChunkBatcher implements Runnable {
private static final ThreadLocal<Tessellator[]> tessellators = new ThreadLocal<>();
private final Minecraft mc;
private final Queue<WorldRenderer> todo;
public ChunkBatcher(Minecraft mc, Queue todo) {
this.mc = mc;
this.todo = todo;
}
@Override
public void run() {
while(mc.running) {
compileChunks();
if(todo.isEmpty()) {
try {
Thread.sleep(10L);
} catch (InterruptedException e) {
break;
}
}
}
}
private void compileChunks() {
WorldRenderer renderer = todo.poll();
if(renderer == null) return;
renderer.updateRenderer(true);
}
}

@ -7,7 +7,8 @@ public class Constants {
public static boolean DISABLE_MODULO = false, public static boolean DISABLE_MODULO = false,
USE_64BIT_PERLIN_GENERATOR = false, USE_64BIT_PERLIN_GENERATOR = false,
ENABLE_FRINGE_LAND = false, ENABLE_FRINGE_LAND = false,
FLOAT_PERLIN_GENERATOR = false; FLOAT_PERLIN_GENERATOR = false,
COMPILE_CHUNK_ASYNC = false;
static { static {
Unsafe unsafe; Unsafe unsafe;

@ -44,7 +44,7 @@ public class NoiseGeneratorPerlin extends NoiseGenerator
return par3 + par1 * (par5 - par3); return par3 + par1 * (par5 - par3);
} }
public final double grad2(int par1, double par2, double par4) public final double grad2d(int par1, double par2, double par4)
{ {
int var6 = par1 & 15; int var6 = par1 & 15;
double var7 = (double)(1 - ((var6 & 8) >> 3)) * par2; double var7 = (double)(1 - ((var6 & 8) >> 3)) * par2;
@ -52,7 +52,7 @@ public class NoiseGeneratorPerlin extends NoiseGenerator
return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9); return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9);
} }
public final double grad(int par1, double par2, double par4, double par6) public final double grad3d(int par1, double par2, double par4, double par6)
{ {
int var8 = par1 & 15; int var8 = par1 & 15;
double var9 = var8 < 8 ? par2 : par4; double var9 = var8 < 8 ? par2 : par4;
@ -120,8 +120,8 @@ public class NoiseGeneratorPerlin extends NoiseGenerator
int var66 = this.permutations[var19] + var41; int var66 = this.permutations[var19] + var41;
int var67 = this.permutations[var34 + 1] + 0; int var67 = this.permutations[var34 + 1] + 0;
var22 = this.permutations[var67] + var41; var22 = this.permutations[var67] + var41;
var70 = this.lerp(var35, this.grad2(this.permutations[var66], var31, var38), this.grad(this.permutations[var22], var31 - 1.0D, 0.0D, var38)); var70 = this.lerp(var35, this.grad2d(this.permutations[var66], var31, var38), this.grad3d(this.permutations[var22], var31 - 1.0D, 0.0D, var38));
var73 = this.lerp(var35, this.grad(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D)); var73 = this.lerp(var35, this.grad3d(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad3d(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D));
double var79 = this.lerp(var42, var70, var73); double var79 = this.lerp(var42, var70, var73);
var10001 = var75++; var10001 = var75++;
par1ArrayOfDouble[var10001] += FLOAT_PERLIN_GENERATOR ? (float) (var79 * var77) : var79 * var77; par1ArrayOfDouble[var10001] += FLOAT_PERLIN_GENERATOR ? (float) (var79 * var77) : var79 * var77;
@ -195,10 +195,10 @@ public class NoiseGeneratorPerlin extends NoiseGenerator
int var74 = this.permutations[var41 + 1] + var55; int var74 = this.permutations[var41 + 1] + var55;
var75 = this.permutations[var74] + var48; var75 = this.permutations[var74] + var48;
int var76 = this.permutations[var74 + 1] + var48; int var76 = this.permutations[var74 + 1] + var48;
var29 = this.lerp(var42, this.grad(this.permutations[var71], var38, var52, var45), this.grad(this.permutations[var75], var38 - 1.0D, var52, var45)); var29 = this.lerp(var42, this.grad3d(this.permutations[var71], var38, var52, var45), this.grad3d(this.permutations[var75], var38 - 1.0D, var52, var45));
var31 = this.lerp(var42, this.grad(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45)); var31 = this.lerp(var42, this.grad3d(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad3d(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45));
var33 = this.lerp(var42, this.grad(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D)); var33 = this.lerp(var42, this.grad3d(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad3d(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D));
var35 = this.lerp(var42, this.grad(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D)); var35 = this.lerp(var42, this.grad3d(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad3d(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D));
} }
double var58 = this.lerp(var56, var29, var31); double var58 = this.lerp(var56, var29, var31);

@ -44,7 +44,7 @@ public class NoiseGeneratorPerlin2 extends NoiseGenerator
return par3 + par1 * (par5 - par3); return par3 + par1 * (par5 - par3);
} }
public final double grad2(int par1, double par2, double par4) public final double grad2d(int par1, double par2, double par4)
{ {
int var6 = par1 & 15; int var6 = par1 & 15;
double var7 = (double)(1 - ((var6 & 8) >> 3)) * par2; double var7 = (double)(1 - ((var6 & 8) >> 3)) * par2;
@ -52,7 +52,7 @@ public class NoiseGeneratorPerlin2 extends NoiseGenerator
return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9); return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9);
} }
public final double grad(int par1, double par2, double par4, double par6) public final double grad3d(int par1, double par2, double par4, double par6)
{ {
int var8 = par1 & 15; int var8 = par1 & 15;
double var9 = var8 < 8 ? par2 : par4; double var9 = var8 < 8 ? par2 : par4;
@ -119,8 +119,8 @@ public class NoiseGeneratorPerlin2 extends NoiseGenerator
int var66 = this.permutations[var19] + var41; int var66 = this.permutations[var19] + var41;
int var67 = this.permutations[var34 + 1] + 0; int var67 = this.permutations[var34 + 1] + 0;
var22 = this.permutations[var67] + var41; var22 = this.permutations[var67] + var41;
var70 = this.lerp(var35, this.grad2(this.permutations[var66], var31, var38), this.grad(this.permutations[var22], var31 - 1.0D, 0.0D, var38)); var70 = this.lerp(var35, this.grad2d(this.permutations[var66], var31, var38), this.grad3d(this.permutations[var22], var31 - 1.0D, 0.0D, var38));
var73 = this.lerp(var35, this.grad(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D)); var73 = this.lerp(var35, this.grad3d(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad3d(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D));
double var79 = this.lerp(var42, var70, var73); double var79 = this.lerp(var42, var70, var73);
var10001 = var75++; var10001 = var75++;
par1ArrayOfDouble[var10001] += FLOAT_PERLIN_GENERATOR ? (float) (var79 * var77) : var79 * var77; par1ArrayOfDouble[var10001] += FLOAT_PERLIN_GENERATOR ? (float) (var79 * var77) : var79 * var77;
@ -194,10 +194,10 @@ public class NoiseGeneratorPerlin2 extends NoiseGenerator
int var74 = this.permutations[var41 + 1] + var55; int var74 = this.permutations[var41 + 1] + var55;
var75 = this.permutations[var74] + var48; var75 = this.permutations[var74] + var48;
int var76 = this.permutations[var74 + 1] + var48; int var76 = this.permutations[var74 + 1] + var48;
var29 = this.lerp(var42, this.grad(this.permutations[var71], var38, var52, var45), this.grad(this.permutations[var75], var38 - 1.0D, var52, var45)); var29 = this.lerp(var42, this.grad3d(this.permutations[var71], var38, var52, var45), this.grad3d(this.permutations[var75], var38 - 1.0D, var52, var45));
var31 = this.lerp(var42, this.grad(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45)); var31 = this.lerp(var42, this.grad3d(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad3d(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45));
var33 = this.lerp(var42, this.grad(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D)); var33 = this.lerp(var42, this.grad3d(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad3d(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D));
var35 = this.lerp(var42, this.grad(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D)); var35 = this.lerp(var42, this.grad3d(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad3d(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D));
} }
double var58 = this.lerp(var56, var29, var31); double var58 = this.lerp(var56, var29, var31);

@ -44,7 +44,7 @@ public class NoiseGeneratorPerlin64 extends NoiseGenerator
return par3 + par1 * (par5 - par3); return par3 + par1 * (par5 - par3);
} }
public final double func_76309_a(int par1, double par2, double par4) public final double grad2d(int par1, double par2, double par4)
{ {
int var6 = par1 & 15; int var6 = par1 & 15;
double var7 = (double)(1 - ((var6 & 8) >> 3)) * par2; double var7 = (double)(1 - ((var6 & 8) >> 3)) * par2;
@ -52,7 +52,7 @@ public class NoiseGeneratorPerlin64 extends NoiseGenerator
return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9); return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9);
} }
public final double grad(int par1, double par2, double par4, double par6) public final double grad3d(int par1, double par2, double par4, double par6)
{ {
int var8 = par1 & 15; int var8 = par1 & 15;
double var9 = var8 < 8 ? par2 : par4; double var9 = var8 < 8 ? par2 : par4;
@ -120,8 +120,8 @@ public class NoiseGeneratorPerlin64 extends NoiseGenerator
int var66 = (int) (this.permutations[var19] + var41); int var66 = (int) (this.permutations[var19] + var41);
int var67 = this.permutations[var34 + 1] + 0; int var67 = this.permutations[var34 + 1] + 0;
var22 = (int) (this.permutations[var67] + var41); var22 = (int) (this.permutations[var67] + var41);
var70 = this.lerp(var35, this.func_76309_a(this.permutations[var66], var31, var38), this.grad(this.permutations[var22], var31 - 1.0D, 0.0D, var38)); var70 = this.lerp(var35, this.grad2d(this.permutations[var66], var31, var38), this.grad3d(this.permutations[var22], var31 - 1.0D, 0.0D, var38));
var73 = this.lerp(var35, this.grad(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D)); var73 = this.lerp(var35, this.grad3d(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad3d(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D));
double var79 = this.lerp(var42, var70, var73); double var79 = this.lerp(var42, var70, var73);
var10001 = var75++; var10001 = var75++;
par1ArrayOfDouble[var10001] += FLOAT_PERLIN_GENERATOR ? (float) (var79 * var77) : var79 * var77; par1ArrayOfDouble[var10001] += FLOAT_PERLIN_GENERATOR ? (float) (var79 * var77) : var79 * var77;
@ -195,10 +195,10 @@ public class NoiseGeneratorPerlin64 extends NoiseGenerator
int var74 = this.permutations[var41 + 1] + var55; int var74 = this.permutations[var41 + 1] + var55;
var75 = this.permutations[var74] + var48; var75 = this.permutations[var74] + var48;
int var76 = this.permutations[var74 + 1] + var48; int var76 = this.permutations[var74 + 1] + var48;
var29 = this.lerp(var42, this.grad(this.permutations[var71], var38, var52, var45), this.grad(this.permutations[var75], var38 - 1.0D, var52, var45)); var29 = this.lerp(var42, this.grad3d(this.permutations[var71], var38, var52, var45), this.grad3d(this.permutations[var75], var38 - 1.0D, var52, var45));
var31 = this.lerp(var42, this.grad(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45)); var31 = this.lerp(var42, this.grad3d(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad3d(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45));
var33 = this.lerp(var42, this.grad(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D)); var33 = this.lerp(var42, this.grad3d(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad3d(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D));
var35 = this.lerp(var42, this.grad(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D)); var35 = this.lerp(var42, this.grad3d(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad3d(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D));
} }
double var58 = this.lerp(var56, var29, var31); double var58 = this.lerp(var56, var29, var31);

@ -331,6 +331,8 @@ public class RenderBlocks
* Grass flag for ambient occlusion on Center X, Negative Y, and Positive Z * Grass flag for ambient occlusion on Center X, Negative Y, and Positive Z
*/ */
private boolean aoGrassXYZCNP; private boolean aoGrassXYZCNP;
private Tessellator tessellator = Tessellator.instance;
public RenderBlocks(IBlockAccess par1IBlockAccess) public RenderBlocks(IBlockAccess par1IBlockAccess)
{ {
@ -425,7 +427,7 @@ public class RenderBlocks
*/ */
private boolean renderBlockBed(Block par1Block, BigInteger par2, int par3, BigInteger par4) private boolean renderBlockBed(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4); int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4);
int var7 = BlockBed.getDirection(var6); int var7 = BlockBed.getDirection(var6);
boolean var8 = BlockBed.isBlockHeadOfBed(var6); boolean var8 = BlockBed.isBlockHeadOfBed(var6);
@ -582,7 +584,7 @@ public class RenderBlocks
par1BlockBrewingStand.setBlockBounds(0.125F, 0.0F, 0.5625F, 0.5F, 0.125F, 0.9375F); par1BlockBrewingStand.setBlockBounds(0.125F, 0.0F, 0.5625F, 0.5F, 0.125F, 0.9375F);
this.renderStandardBlock(par1BlockBrewingStand, par2, par3, par4); this.renderStandardBlock(par1BlockBrewingStand, par2, par3, par4);
this.clearOverrideBlockTexture(); this.clearOverrideBlockTexture();
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
var5.setBrightness(par1BlockBrewingStand.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4)); var5.setBrightness(par1BlockBrewingStand.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var6 = 1.0F; float var6 = 1.0F;
int var7 = par1BlockBrewingStand.colorMultiplier(this.blockAccess, par2, par3, par4); int var7 = par1BlockBrewingStand.colorMultiplier(this.blockAccess, par2, par3, par4);
@ -650,7 +652,7 @@ public class RenderBlocks
private boolean renderBlockCauldron(BlockCauldron par1BlockCauldron, BigInteger par2, int par3, BigInteger par4) private boolean renderBlockCauldron(BlockCauldron par1BlockCauldron, BigInteger par2, int par3, BigInteger par4)
{ {
this.renderStandardBlock(par1BlockCauldron, par2, par3, par4); this.renderStandardBlock(par1BlockCauldron, par2, par3, par4);
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
var5.setBrightness(par1BlockCauldron.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4)); var5.setBrightness(par1BlockCauldron.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var6 = 1.0F; float var6 = 1.0F;
int var7 = par1BlockCauldron.colorMultiplier(this.blockAccess, par2, par3, par4); int var7 = par1BlockCauldron.colorMultiplier(this.blockAccess, par2, par3, par4);
@ -703,7 +705,7 @@ public class RenderBlocks
public boolean renderBlockTorch(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockTorch(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
int var5 = this.blockAccess.getBlockMetadata(par2, par3, par4); int var5 = this.blockAccess.getBlockMetadata(par2, par3, par4);
Tessellator var6 = Tessellator.instance; Tessellator var6 = tessellator;
var6.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4)); var6.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
var6.setColorOpaque_F(1.0F, 1.0F, 1.0F); var6.setColorOpaque_F(1.0F, 1.0F, 1.0F);
double var7 = 0.4000000059604645D; double var7 = 0.4000000059604645D;
@ -743,7 +745,7 @@ public class RenderBlocks
int var6 = var5 & 3; int var6 = var5 & 3;
int var7 = (var5 & 12) >> 2; int var7 = (var5 & 12) >> 2;
this.renderStandardBlock(par1Block, par2, par3, par4); this.renderStandardBlock(par1Block, par2, par3, par4);
Tessellator var8 = Tessellator.instance; Tessellator var8 = tessellator;
var8.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4)); var8.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
var8.setColorOpaque_F(1.0F, 1.0F, 1.0F); var8.setColorOpaque_F(1.0F, 1.0F, 1.0F);
double var9 = -0.1875D; double var9 = -0.1875D;
@ -963,7 +965,7 @@ public class RenderBlocks
int var17 = (var16 & 15) << 4; int var17 = (var16 & 15) << 4;
int var18 = var16 & 240; int var18 = var16 & 240;
Tessellator var19 = Tessellator.instance; Tessellator var19 = tessellator;
double var20 = (double)((float)(var17 + 0) / 256.0F); double var20 = (double)((float)(var17 + 0) / 256.0F);
double var22 = (double)((float)(var18 + 0) / 256.0F); double var22 = (double)((float)(var18 + 0) / 256.0F);
double var24 = ((double)var17 + par14 - 0.01D) / 256.0D; double var24 = ((double)var17 + par14 - 0.01D) / 256.0D;
@ -989,7 +991,7 @@ public class RenderBlocks
int var17 = (var16 & 15) << 4; int var17 = (var16 & 15) << 4;
int var18 = var16 & 240; int var18 = var16 & 240;
Tessellator var19 = Tessellator.instance; Tessellator var19 = tessellator;
double var20 = (double)((float)(var17 + 0) / 256.0F); double var20 = (double)((float)(var17 + 0) / 256.0F);
double var22 = (double)((float)(var18 + 0) / 256.0F); double var22 = (double)((float)(var18 + 0) / 256.0F);
double var24 = ((double)var17 + par14 - 0.01D) / 256.0D; double var24 = ((double)var17 + par14 - 0.01D) / 256.0D;
@ -1015,7 +1017,7 @@ public class RenderBlocks
int var17 = (var16 & 15) << 4; int var17 = (var16 & 15) << 4;
int var18 = var16 & 240; int var18 = var16 & 240;
Tessellator var19 = Tessellator.instance; Tessellator var19 = tessellator;
double var20 = (double)((float)(var17 + 0) / 256.0F); double var20 = (double)((float)(var17 + 0) / 256.0F);
double var22 = (double)((float)(var18 + 0) / 256.0F); double var22 = (double)((float)(var18 + 0) / 256.0F);
double var24 = ((double)var17 + par14 - 0.01D) / 256.0D; double var24 = ((double)var17 + par14 - 0.01D) / 256.0D;
@ -1140,7 +1142,7 @@ public class RenderBlocks
int var5 = this.blockAccess.getBlockMetadata(par2, par3, par4); int var5 = this.blockAccess.getBlockMetadata(par2, par3, par4);
int var6 = var5 & 7; int var6 = var5 & 7;
boolean var7 = (var5 & 8) > 0; boolean var7 = (var5 & 8) > 0;
Tessellator var8 = Tessellator.instance; Tessellator var8 = tessellator;
boolean var9 = this.overrideBlockTexture >= 0; boolean var9 = this.overrideBlockTexture >= 0;
if (!var9) if (!var9)
@ -1369,7 +1371,7 @@ public class RenderBlocks
public boolean func_78577_f(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean func_78577_f(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4); int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4);
int var7 = var6 & 3; int var7 = var6 & 3;
boolean var8 = (var6 & 4) == 4; boolean var8 = (var6 & 4) == 4;
@ -1751,7 +1753,7 @@ public class RenderBlocks
public boolean func_78619_g(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean func_78619_g(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
int var6 = par1Block.getBlockTextureFromSide(0); int var6 = par1Block.getBlockTextureFromSide(0);
int var7 = this.blockAccess.getBlockMetadata(par2, par3, par4); int var7 = this.blockAccess.getBlockMetadata(par2, par3, par4);
boolean var8 = (var7 & 4) == 4; boolean var8 = (var7 & 4) == 4;
@ -1890,7 +1892,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockFire(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockFire(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
int var6 = par1Block.getBlockTextureFromSide(0); int var6 = par1Block.getBlockTextureFromSide(0);
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
@ -2103,7 +2105,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockRedstoneWire(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockRedstoneWire(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4); int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4);
int var7 = par1Block.getBlockTextureFromSideAndMetadata(1, var6); int var7 = par1Block.getBlockTextureFromSideAndMetadata(1, var6);
@ -2343,7 +2345,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockMinecartTrack(BlockRail par1BlockRail, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockMinecartTrack(BlockRail par1BlockRail, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4); int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4);
int var7 = par1BlockRail.getBlockTextureFromSideAndMetadata(0, var6); int var7 = par1BlockRail.getBlockTextureFromSideAndMetadata(0, var6);
@ -2434,7 +2436,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockLadder(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockLadder(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
int var6 = par1Block.getBlockTextureFromSide(0); int var6 = par1Block.getBlockTextureFromSide(0);
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
@ -2495,7 +2497,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockVine(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockVine(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
int var6 = par1Block.getBlockTextureFromSide(0); int var6 = par1Block.getBlockTextureFromSide(0);
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
@ -2581,7 +2583,7 @@ public class RenderBlocks
public boolean renderBlockPane(BlockPane par1BlockPane, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockPane(BlockPane par1BlockPane, BigInteger par2, int par3, BigInteger par4)
{ {
int var5 = this.blockAccess.getHeight(); int var5 = this.blockAccess.getHeight();
Tessellator var6 = Tessellator.instance; Tessellator var6 = tessellator;
var6.setBrightness(par1BlockPane.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4)); var6.setBrightness(par1BlockPane.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var7 = 1.0F; float var7 = 1.0F;
int var8 = par1BlockPane.colorMultiplier(this.blockAccess, par2, par3, par4); int var8 = par1BlockPane.colorMultiplier(this.blockAccess, par2, par3, par4);
@ -3027,7 +3029,7 @@ public class RenderBlocks
*/ */
public boolean renderCrossedSquares(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderCrossedSquares(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
var5.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4)); var5.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var6 = 1.0F; float var6 = 1.0F;
int var7 = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4); int var7 = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4);
@ -3069,7 +3071,7 @@ public class RenderBlocks
public boolean renderBlockStem(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockStem(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
BlockStem var5 = (BlockStem)par1Block; BlockStem var5 = (BlockStem)par1Block;
Tessellator var6 = Tessellator.instance; Tessellator var6 = tessellator;
var6.setBrightness(var5.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4)); var6.setBrightness(var5.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var7 = 1.0F; float var7 = 1.0F;
int var8 = var5.colorMultiplier(this.blockAccess, par2, par3, par4); int var8 = var5.colorMultiplier(this.blockAccess, par2, par3, par4);
@ -3109,7 +3111,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockCrops(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockCrops(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
var5.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4)); var5.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
var5.setColorOpaque_F(1.0F, 1.0F, 1.0F); var5.setColorOpaque_F(1.0F, 1.0F, 1.0F);
this.renderBlockCropsImpl(par1Block, this.blockAccess.getBlockMetadata(par2, par3, par4), par2.doubleValue(), (double)((float)par3 - 0.0625F), par4.doubleValue()); this.renderBlockCropsImpl(par1Block, this.blockAccess.getBlockMetadata(par2, par3, par4), par2.doubleValue(), (double)((float)par3 - 0.0625F), par4.doubleValue());
@ -3121,7 +3123,7 @@ public class RenderBlocks
*/ */
public void renderTorchAtAngle(Block par1Block, double par2, double par4, double par6, double par8, double par10) public void renderTorchAtAngle(Block par1Block, double par2, double par4, double par6, double par8, double par10)
{ {
Tessellator var12 = Tessellator.instance; Tessellator var12 = tessellator;
int var13 = par1Block.getBlockTextureFromSide(0); int var13 = par1Block.getBlockTextureFromSide(0);
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
@ -3174,7 +3176,7 @@ public class RenderBlocks
*/ */
public void drawCrossedSquares(Block par1Block, int par2, double par3, double par5, double par7) public void drawCrossedSquares(Block par1Block, int par2, double par3, double par5, double par7)
{ {
Tessellator var9 = Tessellator.instance; Tessellator var9 = tessellator;
int var10 = par1Block.getBlockTextureFromSideAndMetadata(0, par2); int var10 = par1Block.getBlockTextureFromSideAndMetadata(0, par2);
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
@ -3215,7 +3217,7 @@ public class RenderBlocks
*/ */
public void renderBlockStemSmall(Block par1Block, int par2, double par3, double par5, double par7, double par9) public void renderBlockStemSmall(Block par1Block, int par2, double par3, double par5, double par7, double par9)
{ {
Tessellator var11 = Tessellator.instance; Tessellator var11 = tessellator;
int var12 = par1Block.getBlockTextureFromSideAndMetadata(0, par2); int var12 = par1Block.getBlockTextureFromSideAndMetadata(0, par2);
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
@ -3256,7 +3258,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockLilyPad(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockLilyPad(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
int var6 = par1Block.blockIndexInTexture; int var6 = par1Block.blockIndexInTexture;
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
@ -3297,7 +3299,7 @@ public class RenderBlocks
*/ */
public void renderBlockStemBig(Block par1Block, int par2, int par3, double par4, double par6, double par8, double par10) public void renderBlockStemBig(Block par1Block, int par2, int par3, double par4, double par6, double par8, double par10)
{ {
Tessellator var12 = Tessellator.instance; Tessellator var12 = tessellator;
int var13 = par1Block.getBlockTextureFromSideAndMetadata(0, par2) + 16; int var13 = par1Block.getBlockTextureFromSideAndMetadata(0, par2) + 16;
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
@ -3354,7 +3356,7 @@ public class RenderBlocks
*/ */
public void renderBlockCropsImpl(Block par1Block, int par2, double par3, double par5, double par7) public void renderBlockCropsImpl(Block par1Block, int par2, double par3, double par5, double par7)
{ {
Tessellator var9 = Tessellator.instance; Tessellator var9 = tessellator;
int var10 = par1Block.getBlockTextureFromSideAndMetadata(0, par2); int var10 = par1Block.getBlockTextureFromSideAndMetadata(0, par2);
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
@ -3415,7 +3417,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockFluids(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockFluids(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
if(Minecraft.FIX_RENDERER) var5.setDontTranslate(true); if(Minecraft.FIX_RENDERER) var5.setDontTranslate(true);
int var6 = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4); int var6 = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4);
float var7 = (float)(var6 >> 16 & 255) / 255.0F; float var7 = (float)(var6 >> 16 & 255) / 255.0F;
@ -3693,7 +3695,7 @@ public class RenderBlocks
float var8 = 1.0F; float var8 = 1.0F;
float var9 = 0.8F; float var9 = 0.8F;
float var10 = 0.6F; float var10 = 0.6F;
Tessellator var11 = Tessellator.instance; Tessellator var11 = tessellator;
var11.startDrawingQuads(); var11.startDrawingQuads();
var11.setBrightness(par1Block.getMixedBrightnessForBlock(par2World, par3, par4, par5)); var11.setBrightness(par1Block.getMixedBrightnessForBlock(par2World, par3, par4, par5));
float var12 = 1.0F; float var12 = 1.0F;
@ -3834,7 +3836,7 @@ public class RenderBlocks
int var24 = var19; int var24 = var19;
int var25 = var19; int var25 = var19;
if(Minecraft.FIX_RENDERER) Tessellator.instance.setDontTranslate(true); if(Minecraft.FIX_RENDERER) tessellator.setDontTranslate(true);
if (par1Block.minY <= 0.0D) if (par1Block.minY <= 0.0D)
{ {
@ -3866,7 +3868,7 @@ public class RenderBlocks
var25 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4.add(BigInteger.ONE)); var25 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4.add(BigInteger.ONE));
} }
Tessellator var26 = Tessellator.instance; Tessellator var26 = tessellator;
var26.setBrightness(983055); var26.setBrightness(983055);
this.aoGrassXYZPPC = Block.canBlockGrass[this.blockAccess.getBlockId(par2.add(BigInteger.ONE), par3 + 1, par4)]; this.aoGrassXYZPPC = Block.canBlockGrass[this.blockAccess.getBlockId(par2.add(BigInteger.ONE), par3 + 1, par4)];
this.aoGrassXYZPNC = Block.canBlockGrass[this.blockAccess.getBlockId(par2.add(BigInteger.ONE), par3 - 1, par4)]; this.aoGrassXYZPNC = Block.canBlockGrass[this.blockAccess.getBlockId(par2.add(BigInteger.ONE), par3 - 1, par4)];
@ -4610,7 +4612,7 @@ public class RenderBlocks
var8 = true; var8 = true;
} }
if(Minecraft.FIX_RENDERER) Tessellator.instance.setDontTranslate(false); if(Minecraft.FIX_RENDERER) tessellator.setDontTranslate(false);
this.enableAO = false; this.enableAO = false;
return var8; return var8;
} }
@ -4644,7 +4646,7 @@ public class RenderBlocks
public boolean renderStandardBlockWithColorMultiplier(Block par1Block, BigInteger par2, int par3, BigInteger par4, float par5, float par6, float par7) public boolean renderStandardBlockWithColorMultiplier(Block par1Block, BigInteger par2, int par3, BigInteger par4, float par5, float par6, float par7)
{ {
this.enableAO = false; this.enableAO = false;
Tessellator var8 = Tessellator.instance; Tessellator var8 = tessellator;
boolean var9 = false; boolean var9 = false;
float var10 = 0.5F; float var10 = 0.5F;
float var11 = 1.0F; float var11 = 1.0F;
@ -4678,7 +4680,7 @@ public class RenderBlocks
int var26 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4); int var26 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4);
if(Minecraft.FIX_RENDERER) Tessellator.instance.setDontTranslate(true); if(Minecraft.FIX_RENDERER) tessellator.setDontTranslate(true);
if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 - 1, par4, 0)) if (this.renderAllFaces || par1Block.shouldSideBeRendered(this.blockAccess, par2, par3 - 1, par4, 0))
{ {
@ -4772,14 +4774,14 @@ public class RenderBlocks
var9 = true; var9 = true;
} }
if(Minecraft.FIX_RENDERER) Tessellator.instance.setDontTranslate(false); if(Minecraft.FIX_RENDERER) tessellator.setDontTranslate(false);
return var9; return var9;
} }
private boolean func_78616_a(BlockCocoa par1BlockCocoa, BigInteger par2, int par3, BigInteger par4) private boolean func_78616_a(BlockCocoa par1BlockCocoa, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
var5.setBrightness(par1BlockCocoa.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4)); var5.setBrightness(par1BlockCocoa.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
var5.setColorOpaque_F(1.0F, 1.0F, 1.0F); var5.setColorOpaque_F(1.0F, 1.0F, 1.0F);
int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4); int var6 = this.blockAccess.getBlockMetadata(par2, par3, par4);
@ -4965,7 +4967,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockCactusImpl(Block par1Block, BigInteger par2, int par3, BigInteger par4, float par5, float par6, float par7) public boolean renderBlockCactusImpl(Block par1Block, BigInteger par2, int par3, BigInteger par4, float par5, float par6, float par7)
{ {
Tessellator var8 = Tessellator.instance; Tessellator var8 = tessellator;
boolean var9 = false; boolean var9 = false;
float var10 = 0.5F; float var10 = 0.5F;
float var11 = 1.0F; float var11 = 1.0F;
@ -5399,7 +5401,7 @@ public class RenderBlocks
*/ */
public boolean renderBlockDoor(Block par1Block, BigInteger par2, int par3, BigInteger par4) public boolean renderBlockDoor(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{ {
Tessellator var5 = Tessellator.instance; Tessellator var5 = tessellator;
BlockDoor var6 = (BlockDoor)par1Block; BlockDoor var6 = (BlockDoor)par1Block;
boolean var7 = false; boolean var7 = false;
float var8 = 0.5F; float var8 = 0.5F;
@ -5475,7 +5477,7 @@ public class RenderBlocks
*/ */
public void renderBottomFace(Block par1Block, double par2, double par4, double par6, int par8) public void renderBottomFace(Block par1Block, double par2, double par4, double par6, int par8)
{ {
Tessellator var9 = Tessellator.instance; Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
{ {
@ -5579,7 +5581,7 @@ public class RenderBlocks
*/ */
public void renderTopFace(Block par1Block, double par2, double par4, double par6, int par8) public void renderTopFace(Block par1Block, double par2, double par4, double par6, int par8)
{ {
Tessellator var9 = Tessellator.instance; Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
{ {
@ -5683,7 +5685,7 @@ public class RenderBlocks
*/ */
public void renderEastFace(Block par1Block, double par2, double par4, double par6, int par8) public void renderEastFace(Block par1Block, double par2, double par4, double par6, int par8)
{ {
Tessellator var9 = Tessellator.instance; Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
{ {
@ -5795,7 +5797,7 @@ public class RenderBlocks
*/ */
public void renderWestFace(Block par1Block, double par2, double par4, double par6, int par8) public void renderWestFace(Block par1Block, double par2, double par4, double par6, int par8)
{ {
Tessellator var9 = Tessellator.instance; Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
{ {
@ -5907,7 +5909,7 @@ public class RenderBlocks
*/ */
public void renderNorthFace(Block par1Block, double par2, double par4, double par6, int par8) public void renderNorthFace(Block par1Block, double par2, double par4, double par6, int par8)
{ {
Tessellator var9 = Tessellator.instance; Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
{ {
@ -6019,7 +6021,7 @@ public class RenderBlocks
*/ */
public void renderSouthFace(Block par1Block, double par2, double par4, double par6, int par8) public void renderSouthFace(Block par1Block, double par2, double par4, double par6, int par8)
{ {
Tessellator var9 = Tessellator.instance; Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0) if (this.overrideBlockTexture >= 0)
{ {
@ -6131,7 +6133,7 @@ public class RenderBlocks
*/ */
public void renderBlockAsItem(Block par1Block, int par2, float par3) public void renderBlockAsItem(Block par1Block, int par2, float par3)
{ {
Tessellator var4 = Tessellator.instance; Tessellator var4 = tessellator;
boolean var5 = par1Block.blockID == Block.grass.blockID; boolean var5 = par1Block.blockID == Block.grass.blockID;
int var6; int var6;
float var7; float var7;
@ -6533,4 +6535,8 @@ public class RenderBlocks
{ {
return par0 == 0 ? true : (par0 == 31 ? true : (par0 == 13 ? true : (par0 == 10 ? true : (par0 == 11 ? true : (par0 == 27 ? true : (par0 == 22 ? true : (par0 == 21 ? true : (par0 == 16 ? true : par0 == 26)))))))); return par0 == 0 ? true : (par0 == 31 ? true : (par0 == 13 ? true : (par0 == 10 ? true : (par0 == 11 ? true : (par0 == 27 ? true : (par0 == 22 ? true : (par0 == 21 ? true : (par0 == 16 ? true : par0 == 26))))))));
} }
public void setTessellator(Tessellator tessellator) {
this.tessellator = tessellator;
}
} }

@ -11,7 +11,10 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Queue;
import java.util.Random; import java.util.Random;
import java.util.concurrent.ConcurrentLinkedQueue;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.ARBOcclusionQuery; import org.lwjgl.opengl.ARBOcclusionQuery;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
@ -146,6 +149,9 @@ public class RenderGlobal implements IWorldAccess
* The offset used to determine if a renderer is one of the sixteenth that are being updated this frame * The offset used to determine if a renderer is one of the sixteenth that are being updated this frame
*/ */
int frustumCheckOffset = 0; int frustumCheckOffset = 0;
private Queue<WorldRenderer> chunksToUpdate;
private ChunkBatcher chunkBatcher;
public RenderGlobal(Minecraft par1Minecraft, RenderEngine par2RenderEngine) public RenderGlobal(Minecraft par1Minecraft, RenderEngine par2RenderEngine)
{ {
@ -213,6 +219,16 @@ public class RenderGlobal implements IWorldAccess
var5.draw(); var5.draw();
GL11.glEndList(); GL11.glEndList();
if(Constants.COMPILE_CHUNK_ASYNC) {
chunksToUpdate = new ConcurrentLinkedQueue<>();
chunkBatcher = new ChunkBatcher(mc, chunksToUpdate);
int workers = Math.max(Runtime.getRuntime().availableProcessors() / 2, 1);
for(int i = 0; i < workers; i++) {
Thread thread = new Thread(chunkBatcher, "ChunkBatcher-" + i);
thread.setDaemon(true);
thread.start();
}
}
} }
private void renderStars() private void renderStars()
@ -1377,6 +1393,10 @@ public class RenderGlobal implements IWorldAccess
if (var10 != null) if (var10 != null)
{ {
if(Constants.COMPILE_CHUNK_ASYNC) {
if(!var10.isCompiled) var10.compileAllLayers();
else chunksToUpdate.add(var10);
}
if (!par2) if (!par2)
{ {
if (var10.distanceToEntitySquared(par1EntityLiving) > 256.0F) if (var10.distanceToEntitySquared(par1EntityLiving) > 256.0F)
@ -1426,50 +1446,51 @@ public class RenderGlobal implements IWorldAccess
} }
this.theWorld.theProfiler.endSection(); this.theWorld.theProfiler.endSection();
this.theWorld.theProfiler.startSection("sort"); if(!Constants.COMPILE_CHUNK_ASYNC) {
this.theWorld.theProfiler.startSection("sort");
if (var6 != null) if (var6 != null)
{
if (var6.size() > 1)
{ {
Collections.sort(var6, var4); if (var6.size() > 1)
} {
Collections.sort(var6, var4);
}
for (var9 = var6.size() - 1; var9 >= 0; --var9) for (var9 = var6.size() - 1; var9 >= 0; --var9)
{ {
var10 = (WorldRenderer)var6.get(var9); var10 = (WorldRenderer)var6.get(var9);
var10.updateRenderer(); var10.updateRenderer(false);
var10.needsUpdate = false; }
} }
}
this.theWorld.theProfiler.endSection();
var9 = 0;
this.theWorld.theProfiler.startSection("rebuild");
int var16;
for (var16 = var3 - 1; var16 >= 0; --var16) this.theWorld.theProfiler.endSection();
{ var9 = 0;
WorldRenderer var17 = var5[var16]; this.theWorld.theProfiler.startSection("rebuild");
int var16;
if (var17 != null) for (var16 = var3 - 1; var16 >= 0; --var16)
{ {
if (!var17.isInFrustum && var16 != var3 - 1) WorldRenderer var17 = var5[var16];
if (var17 != null)
{ {
var5[var16] = null; if (!var17.isInFrustum && var16 != var3 - 1)
var5[0] = null; {
break; var5[var16] = null;
} var5[0] = null;
break;
}
var5[var16].updateRenderer(); var5[var16].updateRenderer(false);
var5[var16].needsUpdate = false; ++var9;
++var9; }
} }
}
this.theWorld.theProfiler.endSection(); this.theWorld.theProfiler.endSection();
}
this.theWorld.theProfiler.startSection("cleanup"); this.theWorld.theProfiler.startSection("cleanup");
var16 = 0; int var16 = 0;
var11 = 0; var11 = 0;
for (var12 = this.worldRenderersToUpdate.size(); var16 != var12; ++var16) for (var12 = this.worldRenderersToUpdate.size(); var16 != var12; ++var16)

@ -5,6 +5,8 @@ import java.nio.ByteOrder;
import java.nio.FloatBuffer; import java.nio.FloatBuffer;
import java.nio.IntBuffer; import java.nio.IntBuffer;
import java.nio.ShortBuffer; import java.nio.ShortBuffer;
import java.util.Arrays;
import org.lwjgl.opengl.ARBVertexBufferObject; import org.lwjgl.opengl.ARBVertexBufferObject;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GLContext; import org.lwjgl.opengl.GLContext;
@ -101,7 +103,7 @@ public class Tessellator
private int normal; private int normal;
/** The static instance of the Tessellator. */ /** The static instance of the Tessellator. */
public static final Tessellator instance = new Tessellator(2097152); public static final Tessellator instance = new Tessellator(0);
/** Whether this tessellator is currently in draw mode. */ /** Whether this tessellator is currently in draw mode. */
private boolean isDrawing = false; private boolean isDrawing = false;
@ -126,14 +128,11 @@ public class Tessellator
private boolean dontTranslate = false; private boolean dontTranslate = false;
private Tessellator(int par1) Tessellator(int par1)
{ {
this.bufferSize = par1; this.bufferSize = par1;
this.byteBuffer = GLAllocation.createDirectByteBuffer(par1 * 4);
this.intBuffer = this.byteBuffer.asIntBuffer();
this.floatBuffer = this.byteBuffer.asFloatBuffer();
this.shortBuffer = this.byteBuffer.asShortBuffer();
this.rawBuffer = new int[par1]; this.rawBuffer = new int[par1];
createBuffers();
this.useVBO = tryVBO && GLContext.getCapabilities().GL_ARB_vertex_buffer_object; this.useVBO = tryVBO && GLContext.getCapabilities().GL_ARB_vertex_buffer_object;
if (this.useVBO) if (this.useVBO)
@ -143,12 +142,19 @@ public class Tessellator
} }
} }
/** private void createBuffers() {
this.byteBuffer = GLAllocation.createDirectByteBuffer(this.bufferSize * 4);
this.intBuffer = this.byteBuffer.asIntBuffer();
this.floatBuffer = this.byteBuffer.asFloatBuffer();
this.shortBuffer = this.byteBuffer.asShortBuffer();
}
/**
* Draws the data set up in this tessellator and resets the state to prepare for new drawing. * Draws the data set up in this tessellator and resets the state to prepare for new drawing.
*/ */
public int draw() public int draw()
{ {
if (!this.isDrawing) if (!this.isDrawing())
{ {
throw new IllegalStateException("Not tesselating!"); throw new IllegalStateException("Not tesselating!");
} }
@ -159,6 +165,9 @@ public class Tessellator
if (this.vertexCount > 0) if (this.vertexCount > 0)
{ {
this.intBuffer.clear(); this.intBuffer.clear();
if(intBuffer.remaining() < this.bufferSize) {
createBuffers();
}
this.intBuffer.put(this.rawBuffer, 0, this.rawBufferIndex); this.intBuffer.put(this.rawBuffer, 0, this.rawBufferIndex);
this.byteBuffer.position(0); this.byteBuffer.position(0);
this.byteBuffer.limit(this.rawBufferIndex * 4); this.byteBuffer.limit(this.rawBufferIndex * 4);
@ -309,7 +318,7 @@ public class Tessellator
*/ */
public void startDrawing(int par1) public void startDrawing(int par1)
{ {
if (this.isDrawing) if (this.isDrawing())
{ {
throw new IllegalStateException("Already tesselating!"); throw new IllegalStateException("Already tesselating!");
} }
@ -442,6 +451,10 @@ public class Tessellator
public void addVertex(double par1, double par3, double par5) public void addVertex(double par1, double par3, double par5)
{ {
++this.addedVertices; ++this.addedVertices;
if(this.rawBufferIndex >= this.bufferSize - 32) {
grow(32);
}
if (this.drawMode == 7 && convertQuadsToTriangles && this.addedVertices % 4 == 0) if (this.drawMode == 7 && convertQuadsToTriangles && this.addedVertices % 4 == 0)
{ {
@ -506,11 +519,15 @@ public class Tessellator
this.rawBufferIndex += 8; this.rawBufferIndex += 8;
++this.vertexCount; ++this.vertexCount;
if (this.vertexCount % 4 == 0 && this.rawBufferIndex >= this.bufferSize - 32) // if (this.vertexCount % 4 == 0 && this.rawBufferIndex >= this.bufferSize - 32)
{ // {
this.draw(); // this.draw();
this.isDrawing = true; // this.isDrawing = true;
} // }
}
private void grow(int size) {
this.rawBuffer = Arrays.copyOf(this.rawBuffer, this.bufferSize += size);
} }
/** /**
@ -578,4 +595,8 @@ public class Tessellator
public void setDontTranslate(boolean dontTranslate) { public void setDontTranslate(boolean dontTranslate) {
this.dontTranslate = dontTranslate; this.dontTranslate = dontTranslate;
} }
public boolean isDrawing() {
return isDrawing;
}
} }

@ -8,6 +8,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
public abstract class World implements IBlockAccess public abstract class World implements IBlockAccess
{ {
@ -130,6 +131,9 @@ public abstract class World implements IBlockAccess
/** /**
* Gets the biome for a given set of x/z coordinates * Gets the biome for a given set of x/z coordinates
*/ */
private final AtomicInteger blockUpdateDepth = new AtomicInteger();
public BiomeGenBase getBiomeGenForCoords(BigInteger par1, BigInteger par2) public BiomeGenBase getBiomeGenForCoords(BigInteger par1, BigInteger par2)
{ {
if (this.blockExists(par1, 0, par2)) if (this.blockExists(par1, 0, par2))
@ -593,7 +597,16 @@ public abstract class World implements IBlockAccess
if (var5 != null) if (var5 != null)
{ {
var5.onNeighborBlockChange(this, par1, par2, par3, par4); if(blockUpdateDepth.getAndIncrement() >= 100) {
blockUpdateDepth.getAndDecrement();
return;
}
try {
var5.onNeighborBlockChange(this, par1, par2, par3, par4);
} catch(StackOverflowError e) {
// Oops
}
blockUpdateDepth.getAndDecrement();
} }
} }
} }

@ -13,7 +13,7 @@ public class WorldRenderer
/** Reference to the World object. */ /** Reference to the World object. */
public World worldObj; public World worldObj;
private int glRenderList = -1; private int glRenderList = -1;
private static Tessellator tessellator = Tessellator.instance; private Tessellator[] tessellators = Constants.COMPILE_CHUNK_ASYNC ? new Tessellator[] {new Tessellator(0), new Tessellator(0)} : null;
public static int chunksUpdated = 0; public static int chunksUpdated = 0;
public BigInteger posX; public BigInteger posX;
public int posY; public int posY;
@ -78,6 +78,8 @@ public class WorldRenderer
/** Bytes sent to the GPU */ /** Bytes sent to the GPU */
private int bytesDrawn; private int bytesDrawn;
public boolean isCompiled = true;
public WorldRenderer(World par1World, List par2List, BigInteger par3, int par4, BigInteger par5, int par6) public WorldRenderer(World par1World, List par2List, BigInteger par3, int par4, BigInteger par5, int par6)
{ {
@ -86,6 +88,7 @@ public class WorldRenderer
this.glRenderList = par6; this.glRenderList = par6;
this.setPosition(par3, par4, par5); this.setPosition(par3, par4, par5);
this.needsUpdate = false; this.needsUpdate = false;
System.out.println("WorldRenderer.WorldRenderer()");
} }
/** /**
@ -125,9 +128,11 @@ public class WorldRenderer
/** /**
* Will update this chunk renderer * Will update this chunk renderer
* @param async
*/ */
public void updateRenderer() public void updateRenderer(boolean async)
{ {
if(this.worldObj == null) return;
if (this.needsUpdate) if (this.needsUpdate)
{ {
this.needsUpdate = false; this.needsUpdate = false;
@ -161,6 +166,8 @@ public class WorldRenderer
boolean var12 = false; boolean var12 = false;
boolean var13 = false; boolean var13 = false;
boolean var14 = false; boolean var14 = false;
Tessellator tessellator = async ? tessellators[var11] : Tessellator.instance;
var10.setTessellator(tessellator);
// NOTE: YZX -> ZXY // NOTE: YZX -> ZXY
for (BigInteger var16 = var3; var16.compareTo(var6) < 0; var16 = var16.add(BigInteger.ONE)) for (BigInteger var16 = var3; var16.compareTo(var6) < 0; var16 = var16.add(BigInteger.ONE))
@ -176,13 +183,6 @@ public class WorldRenderer
if (!var14) if (!var14)
{ {
var14 = true; var14 = true;
GL11.glNewList(this.glRenderList + var11, GL11.GL_COMPILE);
GL11.glPushMatrix();
this.setupGLTranslation();
float var19 = 1.000001F;
GL11.glTranslatef(-8.0F, -8.0F, -8.0F);
GL11.glScalef(var19, var19, var19);
GL11.glTranslatef(8.0F, 8.0F, 8.0F);
tessellator.startDrawingQuads(); tessellator.startDrawingQuads();
tessellator.setTranslation((double)(-this.posX.doubleValue()), (double)(-this.posY), (double)(-this.posZ.doubleValue())); tessellator.setTranslation((double)(-this.posX.doubleValue()), (double)(-this.posY), (double)(-this.posZ.doubleValue()));
} }
@ -219,9 +219,10 @@ public class WorldRenderer
if (var14) if (var14)
{ {
this.bytesDrawn += tessellator.draw(); if(!async) {
GL11.glPopMatrix(); compile(var11, false);
GL11.glEndList(); }
isCompiled = !async;
tessellator.setTranslation(0.0D, 0.0D, 0.0D); tessellator.setTranslation(0.0D, 0.0D, 0.0D);
} }
else else
@ -252,7 +253,26 @@ public class WorldRenderer
} }
} }
/** void compile(int pass, boolean async) {
GL11.glNewList(this.glRenderList + pass, GL11.GL_COMPILE);
GL11.glPushMatrix();
this.setupGLTranslation();
float var19 = 1.000001F;
GL11.glTranslatef(-8.0F, -8.0F, -8.0F);
GL11.glScalef(var19, var19, var19);
GL11.glTranslatef(8.0F, 8.0F, 8.0F);
this.bytesDrawn += (async ? tessellators[pass] : Tessellator.instance).draw();
// System.out.println(this.bytesDrawn);
GL11.glPopMatrix();
GL11.glEndList();
}
public void compileAllLayers() {
for(int i = 0; i < 2; i++) if(tessellators[i].isDrawing()) compile(i, true);
isCompiled = true;
}
/**
* Returns the distance of this chunk renderer to the entity without performing the final normalizing square root, * Returns the distance of this chunk renderer to the entity without performing the final normalizing square root,
* for performance reasons. * for performance reasons.
*/ */

Loading…
Cancel
Save