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,
USE_64BIT_PERLIN_GENERATOR = false,
ENABLE_FRINGE_LAND = false,
FLOAT_PERLIN_GENERATOR = false;
FLOAT_PERLIN_GENERATOR = false,
COMPILE_CHUNK_ASYNC = false;
static {
Unsafe unsafe;

@ -44,7 +44,7 @@ public class NoiseGeneratorPerlin extends NoiseGenerator
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;
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);
}
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;
double var9 = var8 < 8 ? par2 : par4;
@ -120,8 +120,8 @@ public class NoiseGeneratorPerlin extends NoiseGenerator
int var66 = this.permutations[var19] + var41;
int var67 = this.permutations[var34 + 1] + 0;
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));
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));
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.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);
var10001 = var75++;
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;
var75 = this.permutations[var74] + 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));
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));
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));
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));
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.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.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.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);

@ -44,7 +44,7 @@ public class NoiseGeneratorPerlin2 extends NoiseGenerator
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;
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);
}
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;
double var9 = var8 < 8 ? par2 : par4;
@ -119,8 +119,8 @@ public class NoiseGeneratorPerlin2 extends NoiseGenerator
int var66 = this.permutations[var19] + var41;
int var67 = this.permutations[var34 + 1] + 0;
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));
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));
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.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);
var10001 = var75++;
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;
var75 = this.permutations[var74] + 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));
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));
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));
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));
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.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.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.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);

@ -44,7 +44,7 @@ public class NoiseGeneratorPerlin64 extends NoiseGenerator
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;
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);
}
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;
double var9 = var8 < 8 ? par2 : par4;
@ -120,8 +120,8 @@ public class NoiseGeneratorPerlin64 extends NoiseGenerator
int var66 = (int) (this.permutations[var19] + var41);
int var67 = this.permutations[var34 + 1] + 0;
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));
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));
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.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);
var10001 = var75++;
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;
var75 = this.permutations[var74] + 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));
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));
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));
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));
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.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.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.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);

@ -331,6 +331,8 @@ public class RenderBlocks
* Grass flag for ambient occlusion on Center X, Negative Y, and Positive Z
*/
private boolean aoGrassXYZCNP;
private Tessellator tessellator = Tessellator.instance;
public RenderBlocks(IBlockAccess par1IBlockAccess)
{
@ -425,7 +427,7 @@ public class RenderBlocks
*/
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 var7 = BlockBed.getDirection(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);
this.renderStandardBlock(par1BlockBrewingStand, par2, par3, par4);
this.clearOverrideBlockTexture();
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
var5.setBrightness(par1BlockBrewingStand.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var6 = 1.0F;
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)
{
this.renderStandardBlock(par1BlockCauldron, par2, par3, par4);
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
var5.setBrightness(par1BlockCauldron.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var6 = 1.0F;
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)
{
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.setColorOpaque_F(1.0F, 1.0F, 1.0F);
double var7 = 0.4000000059604645D;
@ -743,7 +745,7 @@ public class RenderBlocks
int var6 = var5 & 3;
int var7 = (var5 & 12) >> 2;
this.renderStandardBlock(par1Block, par2, par3, par4);
Tessellator var8 = Tessellator.instance;
Tessellator var8 = tessellator;
var8.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
var8.setColorOpaque_F(1.0F, 1.0F, 1.0F);
double var9 = -0.1875D;
@ -963,7 +965,7 @@ public class RenderBlocks
int var17 = (var16 & 15) << 4;
int var18 = var16 & 240;
Tessellator var19 = Tessellator.instance;
Tessellator var19 = tessellator;
double var20 = (double)((float)(var17 + 0) / 256.0F);
double var22 = (double)((float)(var18 + 0) / 256.0F);
double var24 = ((double)var17 + par14 - 0.01D) / 256.0D;
@ -989,7 +991,7 @@ public class RenderBlocks
int var17 = (var16 & 15) << 4;
int var18 = var16 & 240;
Tessellator var19 = Tessellator.instance;
Tessellator var19 = tessellator;
double var20 = (double)((float)(var17 + 0) / 256.0F);
double var22 = (double)((float)(var18 + 0) / 256.0F);
double var24 = ((double)var17 + par14 - 0.01D) / 256.0D;
@ -1015,7 +1017,7 @@ public class RenderBlocks
int var17 = (var16 & 15) << 4;
int var18 = var16 & 240;
Tessellator var19 = Tessellator.instance;
Tessellator var19 = tessellator;
double var20 = (double)((float)(var17 + 0) / 256.0F);
double var22 = (double)((float)(var18 + 0) / 256.0F);
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 var6 = var5 & 7;
boolean var7 = (var5 & 8) > 0;
Tessellator var8 = Tessellator.instance;
Tessellator var8 = tessellator;
boolean var9 = this.overrideBlockTexture >= 0;
if (!var9)
@ -1369,7 +1371,7 @@ public class RenderBlocks
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 var7 = var6 & 3;
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)
{
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
int var6 = par1Block.getBlockTextureFromSide(0);
int var7 = this.blockAccess.getBlockMetadata(par2, par3, par4);
boolean var8 = (var7 & 4) == 4;
@ -1890,7 +1892,7 @@ public class RenderBlocks
*/
public boolean renderBlockFire(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
int var6 = par1Block.getBlockTextureFromSide(0);
if (this.overrideBlockTexture >= 0)
@ -2103,7 +2105,7 @@ public class RenderBlocks
*/
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 var7 = par1Block.getBlockTextureFromSideAndMetadata(1, var6);
@ -2343,7 +2345,7 @@ public class RenderBlocks
*/
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 var7 = par1BlockRail.getBlockTextureFromSideAndMetadata(0, var6);
@ -2434,7 +2436,7 @@ public class RenderBlocks
*/
public boolean renderBlockLadder(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
int var6 = par1Block.getBlockTextureFromSide(0);
if (this.overrideBlockTexture >= 0)
@ -2495,7 +2497,7 @@ public class RenderBlocks
*/
public boolean renderBlockVine(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
int var6 = par1Block.getBlockTextureFromSide(0);
if (this.overrideBlockTexture >= 0)
@ -2581,7 +2583,7 @@ public class RenderBlocks
public boolean renderBlockPane(BlockPane par1BlockPane, BigInteger par2, int par3, BigInteger par4)
{
int var5 = this.blockAccess.getHeight();
Tessellator var6 = Tessellator.instance;
Tessellator var6 = tessellator;
var6.setBrightness(par1BlockPane.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var7 = 1.0F;
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)
{
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
var5.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var6 = 1.0F;
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)
{
BlockStem var5 = (BlockStem)par1Block;
Tessellator var6 = Tessellator.instance;
Tessellator var6 = tessellator;
var6.setBrightness(var5.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
float var7 = 1.0F;
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)
{
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
var5.setBrightness(par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4));
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());
@ -3121,7 +3123,7 @@ public class RenderBlocks
*/
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);
if (this.overrideBlockTexture >= 0)
@ -3174,7 +3176,7 @@ public class RenderBlocks
*/
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);
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)
{
Tessellator var11 = Tessellator.instance;
Tessellator var11 = tessellator;
int var12 = par1Block.getBlockTextureFromSideAndMetadata(0, par2);
if (this.overrideBlockTexture >= 0)
@ -3256,7 +3258,7 @@ public class RenderBlocks
*/
public boolean renderBlockLilyPad(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
int var6 = par1Block.blockIndexInTexture;
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)
{
Tessellator var12 = Tessellator.instance;
Tessellator var12 = tessellator;
int var13 = par1Block.getBlockTextureFromSideAndMetadata(0, par2) + 16;
if (this.overrideBlockTexture >= 0)
@ -3354,7 +3356,7 @@ public class RenderBlocks
*/
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);
if (this.overrideBlockTexture >= 0)
@ -3415,7 +3417,7 @@ public class RenderBlocks
*/
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);
int var6 = par1Block.colorMultiplier(this.blockAccess, par2, par3, par4);
float var7 = (float)(var6 >> 16 & 255) / 255.0F;
@ -3693,7 +3695,7 @@ public class RenderBlocks
float var8 = 1.0F;
float var9 = 0.8F;
float var10 = 0.6F;
Tessellator var11 = Tessellator.instance;
Tessellator var11 = tessellator;
var11.startDrawingQuads();
var11.setBrightness(par1Block.getMixedBrightnessForBlock(par2World, par3, par4, par5));
float var12 = 1.0F;
@ -3834,7 +3836,7 @@ public class RenderBlocks
int var24 = var19;
int var25 = var19;
if(Minecraft.FIX_RENDERER) Tessellator.instance.setDontTranslate(true);
if(Minecraft.FIX_RENDERER) tessellator.setDontTranslate(true);
if (par1Block.minY <= 0.0D)
{
@ -3866,7 +3868,7 @@ public class RenderBlocks
var25 = par1Block.getMixedBrightnessForBlock(this.blockAccess, par2, par3, par4.add(BigInteger.ONE));
}
Tessellator var26 = Tessellator.instance;
Tessellator var26 = tessellator;
var26.setBrightness(983055);
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)];
@ -4610,7 +4612,7 @@ public class RenderBlocks
var8 = true;
}
if(Minecraft.FIX_RENDERER) Tessellator.instance.setDontTranslate(false);
if(Minecraft.FIX_RENDERER) tessellator.setDontTranslate(false);
this.enableAO = false;
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)
{
this.enableAO = false;
Tessellator var8 = Tessellator.instance;
Tessellator var8 = tessellator;
boolean var9 = false;
float var10 = 0.5F;
float var11 = 1.0F;
@ -4678,7 +4680,7 @@ public class RenderBlocks
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))
{
@ -4772,14 +4774,14 @@ public class RenderBlocks
var9 = true;
}
if(Minecraft.FIX_RENDERER) Tessellator.instance.setDontTranslate(false);
if(Minecraft.FIX_RENDERER) tessellator.setDontTranslate(false);
return var9;
}
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.setColorOpaque_F(1.0F, 1.0F, 1.0F);
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)
{
Tessellator var8 = Tessellator.instance;
Tessellator var8 = tessellator;
boolean var9 = false;
float var10 = 0.5F;
float var11 = 1.0F;
@ -5399,7 +5401,7 @@ public class RenderBlocks
*/
public boolean renderBlockDoor(Block par1Block, BigInteger par2, int par3, BigInteger par4)
{
Tessellator var5 = Tessellator.instance;
Tessellator var5 = tessellator;
BlockDoor var6 = (BlockDoor)par1Block;
boolean var7 = false;
float var8 = 0.5F;
@ -5475,7 +5477,7 @@ public class RenderBlocks
*/
public void renderBottomFace(Block par1Block, double par2, double par4, double par6, int par8)
{
Tessellator var9 = Tessellator.instance;
Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0)
{
@ -5579,7 +5581,7 @@ public class RenderBlocks
*/
public void renderTopFace(Block par1Block, double par2, double par4, double par6, int par8)
{
Tessellator var9 = Tessellator.instance;
Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0)
{
@ -5683,7 +5685,7 @@ public class RenderBlocks
*/
public void renderEastFace(Block par1Block, double par2, double par4, double par6, int par8)
{
Tessellator var9 = Tessellator.instance;
Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0)
{
@ -5795,7 +5797,7 @@ public class RenderBlocks
*/
public void renderWestFace(Block par1Block, double par2, double par4, double par6, int par8)
{
Tessellator var9 = Tessellator.instance;
Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0)
{
@ -5907,7 +5909,7 @@ public class RenderBlocks
*/
public void renderNorthFace(Block par1Block, double par2, double par4, double par6, int par8)
{
Tessellator var9 = Tessellator.instance;
Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0)
{
@ -6019,7 +6021,7 @@ public class RenderBlocks
*/
public void renderSouthFace(Block par1Block, double par2, double par4, double par6, int par8)
{
Tessellator var9 = Tessellator.instance;
Tessellator var9 = tessellator;
if (this.overrideBlockTexture >= 0)
{
@ -6131,7 +6133,7 @@ public class RenderBlocks
*/
public void renderBlockAsItem(Block par1Block, int par2, float par3)
{
Tessellator var4 = Tessellator.instance;
Tessellator var4 = tessellator;
boolean var5 = par1Block.blockID == Block.grass.blockID;
int var6;
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))))))));
}
public void setTessellator(Tessellator tessellator) {
this.tessellator = tessellator;
}
}

@ -11,7 +11,10 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Random;
import java.util.concurrent.ConcurrentLinkedQueue;
import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.ARBOcclusionQuery;
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
*/
int frustumCheckOffset = 0;
private Queue<WorldRenderer> chunksToUpdate;
private ChunkBatcher chunkBatcher;
public RenderGlobal(Minecraft par1Minecraft, RenderEngine par2RenderEngine)
{
@ -213,6 +219,16 @@ public class RenderGlobal implements IWorldAccess
var5.draw();
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()
@ -1377,6 +1393,10 @@ public class RenderGlobal implements IWorldAccess
if (var10 != null)
{
if(Constants.COMPILE_CHUNK_ASYNC) {
if(!var10.isCompiled) var10.compileAllLayers();
else chunksToUpdate.add(var10);
}
if (!par2)
{
if (var10.distanceToEntitySquared(par1EntityLiving) > 256.0F)
@ -1426,50 +1446,51 @@ public class RenderGlobal implements IWorldAccess
}
this.theWorld.theProfiler.endSection();
this.theWorld.theProfiler.startSection("sort");
if(!Constants.COMPILE_CHUNK_ASYNC) {
this.theWorld.theProfiler.startSection("sort");
if (var6 != null)
{
if (var6.size() > 1)
if (var6 != null)
{
Collections.sort(var6, var4);
}
if (var6.size() > 1)
{
Collections.sort(var6, var4);
}
for (var9 = var6.size() - 1; var9 >= 0; --var9)
{
var10 = (WorldRenderer)var6.get(var9);
var10.updateRenderer();
var10.needsUpdate = false;
for (var9 = var6.size() - 1; var9 >= 0; --var9)
{
var10 = (WorldRenderer)var6.get(var9);
var10.updateRenderer(false);
}
}
}
this.theWorld.theProfiler.endSection();
var9 = 0;
this.theWorld.theProfiler.startSection("rebuild");
int var16;
for (var16 = var3 - 1; var16 >= 0; --var16)
{
WorldRenderer var17 = var5[var16];
this.theWorld.theProfiler.endSection();
var9 = 0;
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;
var5[0] = null;
break;
}
if (!var17.isInFrustum && var16 != var3 - 1)
{
var5[var16] = null;
var5[0] = null;
break;
}
var5[var16].updateRenderer();
var5[var16].needsUpdate = false;
++var9;
var5[var16].updateRenderer(false);
++var9;
}
}
}
this.theWorld.theProfiler.endSection();
this.theWorld.theProfiler.endSection();
}
this.theWorld.theProfiler.startSection("cleanup");
var16 = 0;
int var16 = 0;
var11 = 0;
for (var12 = this.worldRenderersToUpdate.size(); var16 != var12; ++var16)

@ -5,6 +5,8 @@ import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.ShortBuffer;
import java.util.Arrays;
import org.lwjgl.opengl.ARBVertexBufferObject;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GLContext;
@ -101,7 +103,7 @@ public class Tessellator
private int normal;
/** 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. */
private boolean isDrawing = false;
@ -126,14 +128,11 @@ public class Tessellator
private boolean dontTranslate = false;
private Tessellator(int par1)
Tessellator(int 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];
createBuffers();
this.useVBO = tryVBO && GLContext.getCapabilities().GL_ARB_vertex_buffer_object;
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.
*/
public int draw()
{
if (!this.isDrawing)
if (!this.isDrawing())
{
throw new IllegalStateException("Not tesselating!");
}
@ -159,6 +165,9 @@ public class Tessellator
if (this.vertexCount > 0)
{
this.intBuffer.clear();
if(intBuffer.remaining() < this.bufferSize) {
createBuffers();
}
this.intBuffer.put(this.rawBuffer, 0, this.rawBufferIndex);
this.byteBuffer.position(0);
this.byteBuffer.limit(this.rawBufferIndex * 4);
@ -309,7 +318,7 @@ public class Tessellator
*/
public void startDrawing(int par1)
{
if (this.isDrawing)
if (this.isDrawing())
{
throw new IllegalStateException("Already tesselating!");
}
@ -442,6 +451,10 @@ public class Tessellator
public void addVertex(double par1, double par3, double par5)
{
++this.addedVertices;
if(this.rawBufferIndex >= this.bufferSize - 32) {
grow(32);
}
if (this.drawMode == 7 && convertQuadsToTriangles && this.addedVertices % 4 == 0)
{
@ -506,11 +519,15 @@ public class Tessellator
this.rawBufferIndex += 8;
++this.vertexCount;
if (this.vertexCount % 4 == 0 && this.rawBufferIndex >= this.bufferSize - 32)
{
this.draw();
this.isDrawing = true;
}
// if (this.vertexCount % 4 == 0 && this.rawBufferIndex >= this.bufferSize - 32)
// {
// this.draw();
// 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) {
this.dontTranslate = dontTranslate;
}
public boolean isDrawing() {
return isDrawing;
}
}

@ -8,6 +8,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
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
*/
private final AtomicInteger blockUpdateDepth = new AtomicInteger();
public BiomeGenBase getBiomeGenForCoords(BigInteger par1, BigInteger par2)
{
if (this.blockExists(par1, 0, par2))
@ -593,7 +597,16 @@ public abstract class World implements IBlockAccess
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. */
public World worldObj;
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 BigInteger posX;
public int posY;
@ -78,6 +78,8 @@ public class WorldRenderer
/** Bytes sent to the GPU */
private int bytesDrawn;
public boolean isCompiled = true;
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.setPosition(par3, par4, par5);
this.needsUpdate = false;
System.out.println("WorldRenderer.WorldRenderer()");
}
/**
@ -125,9 +128,11 @@ public class WorldRenderer
/**
* Will update this chunk renderer
* @param async
*/
public void updateRenderer()
public void updateRenderer(boolean async)
{
if(this.worldObj == null) return;
if (this.needsUpdate)
{
this.needsUpdate = false;
@ -161,6 +166,8 @@ public class WorldRenderer
boolean var12 = false;
boolean var13 = false;
boolean var14 = false;
Tessellator tessellator = async ? tessellators[var11] : Tessellator.instance;
var10.setTessellator(tessellator);
// NOTE: YZX -> ZXY
for (BigInteger var16 = var3; var16.compareTo(var6) < 0; var16 = var16.add(BigInteger.ONE))
@ -176,13 +183,6 @@ public class WorldRenderer
if (!var14)
{
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.setTranslation((double)(-this.posX.doubleValue()), (double)(-this.posY), (double)(-this.posZ.doubleValue()));
}
@ -219,9 +219,10 @@ public class WorldRenderer
if (var14)
{
this.bytesDrawn += tessellator.draw();
GL11.glPopMatrix();
GL11.glEndList();
if(!async) {
compile(var11, false);
}
isCompiled = !async;
tessellator.setTranslation(0.0D, 0.0D, 0.0D);
}
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,
* for performance reasons.
*/

Loading…
Cancel
Save