Improve experimental threaded chunk compiler.

master
mckuhei 2 years ago
parent 1bd0475e49
commit 3ac13547cd

@ -36,6 +36,8 @@ public class ChunkBatcher implements Runnable {
WorldRenderer renderer = todo.poll(); WorldRenderer renderer = todo.poll();
if(renderer == null) return; if(renderer == null) return;
renderer.updateRenderer(true); renderer.updateRenderer(true);
// System.out.println(todo.size());
// System.out.println(renderer);
} }
} }

@ -570,7 +570,7 @@ public class RenderGlobal implements IWorldAccess
var14.setPosition(x, var13, z); var14.setPosition(x, var13, z);
if (!var15 && var14.needsUpdate) if (!var15 && var14.needsUpdate)
{ { // WTF this is a unreachable code.
this.worldRenderersToUpdate.add(var14); this.worldRenderersToUpdate.add(var14);
} }
} }
@ -593,6 +593,7 @@ public class RenderGlobal implements IWorldAccess
if (var6.needsUpdate && !this.worldRenderersToUpdate.contains(var6)) if (var6.needsUpdate && !this.worldRenderersToUpdate.contains(var6))
{ {
this.worldRenderersToUpdate.add(var6); this.worldRenderersToUpdate.add(var6);
var6.addedToQueue = false;
} }
} }
@ -626,6 +627,15 @@ public class RenderGlobal implements IWorldAccess
this.markRenderersForNewPosition(MathHelper.floor_double_BigInteger(par1EntityLiving.posXBig), MathHelper.floor_double(par1EntityLiving.posY), MathHelper.floor_double_BigInteger(par1EntityLiving.posZBig)); this.markRenderersForNewPosition(MathHelper.floor_double_BigInteger(par1EntityLiving.posXBig), MathHelper.floor_double(par1EntityLiving.posY), MathHelper.floor_double_BigInteger(par1EntityLiving.posZBig));
Arrays.sort(this.sortedWorldRenderers, new EntitySorter(par1EntityLiving)); Arrays.sort(this.sortedWorldRenderers, new EntitySorter(par1EntityLiving));
} }
if(Constants.COMPILE_CHUNK_ASYNC) {
for (int i = 0; i < sortedWorldRenderers.length; i++) {
WorldRenderer worldRenderer = sortedWorldRenderers[i];
if(!worldRenderer.isCompiled) {
worldRenderer.compileAllLayers();
}
}
}
RenderHelper.disableStandardItemLighting(); RenderHelper.disableStandardItemLighting();
byte var17 = 0; byte var17 = 0;
@ -809,11 +819,12 @@ public class RenderGlobal implements IWorldAccess
if (!this.sortedWorldRenderers[var7].skipRenderPass[par3] && this.sortedWorldRenderers[var7].isInFrustum && (!this.occlusionEnabled || this.sortedWorldRenderers[var7].isVisible)) if (!this.sortedWorldRenderers[var7].skipRenderPass[par3] && this.sortedWorldRenderers[var7].isInFrustum && (!this.occlusionEnabled || this.sortedWorldRenderers[var7].isVisible))
{ {
int var8 = this.sortedWorldRenderers[var7].getGLCallListForPass(par3); WorldRenderer worldRenderer = this.sortedWorldRenderers[var7];
int var8 = worldRenderer.getGLCallListForPass(par3);
if (var8 >= 0) if (var8 >= 0)
{ {
this.glRenderLists.add(this.sortedWorldRenderers[var7]); this.glRenderLists.add(worldRenderer);
++var6; ++var6;
} }
} }
@ -1378,6 +1389,7 @@ public class RenderGlobal implements IWorldAccess
RenderSorter var4 = new RenderSorter(par1EntityLiving); RenderSorter var4 = new RenderSorter(par1EntityLiving);
WorldRenderer[] var5 = new WorldRenderer[var3]; WorldRenderer[] var5 = new WorldRenderer[var3];
ArrayList var6 = null; ArrayList var6 = null;
if(Constants.COMPILE_CHUNK_ASYNC) worldRenderersToUpdate.sort(new EntitySorter(par1EntityLiving));
int var7 = this.worldRenderersToUpdate.size(); int var7 = this.worldRenderersToUpdate.size();
int var8 = 0; int var8 = 0;
this.theWorld.theProfiler.startSection("nearChunksSearch"); this.theWorld.theProfiler.startSection("nearChunksSearch");
@ -1393,9 +1405,13 @@ public class RenderGlobal implements IWorldAccess
if (var10 != null) if (var10 != null)
{ {
if(Constants.COMPILE_CHUNK_ASYNC) { this.worldRenderersToUpdate.set(var9, (Object)null);
if(!var10.isCompiled) var10.compileAllLayers(); if(Constants.COMPILE_CHUNK_ASYNC) {
else chunksToUpdate.add(var10); if(!var10.addedToQueue) {
chunksToUpdate.add(var10);
var10.addedToQueue = true;
}
continue;
} }
if (!par2) if (!par2)
{ {
@ -1434,13 +1450,15 @@ public class RenderGlobal implements IWorldAccess
continue; continue;
} }
if (var6 == null) if(!Constants.COMPILE_CHUNK_ASYNC) {
{ if (var6 == null)
var6 = new ArrayList(); {
var6 = new ArrayList();
}
var6.add(var10);
} }
++var8; ++var8;
var6.add(var10);
this.worldRenderersToUpdate.set(var9, (Object)null); this.worldRenderersToUpdate.set(var9, (Object)null);
} }
} }
@ -1728,6 +1746,7 @@ public class RenderGlobal implements IWorldAccess
{ {
this.worldRenderersToUpdate.add(var20); this.worldRenderersToUpdate.add(var20);
var20.markDirty(); var20.markDirty();
var20.addedToQueue = false;
} }
} }
} }

@ -297,12 +297,13 @@ public class Tessellator
/** /**
* Clears the tessellator state in preparation for new drawing. * Clears the tessellator state in preparation for new drawing.
*/ */
private void reset() public void reset()
{ {
this.vertexCount = 0; this.vertexCount = 0;
this.byteBuffer.clear(); this.byteBuffer.clear();
this.rawBufferIndex = 0; this.rawBufferIndex = 0;
this.addedVertices = 0; this.addedVertices = 0;
this.isDrawing = false;
} }
/** /**
@ -324,8 +325,8 @@ public class Tessellator
} }
else else
{ {
this.reset();
this.isDrawing = true; this.isDrawing = true;
this.reset();
this.drawMode = par1; this.drawMode = par1;
this.hasNormals = false; this.hasNormals = false;
this.hasColor = false; this.hasColor = false;

@ -79,7 +79,7 @@ public class WorldRenderer
/** Bytes sent to the GPU */ /** Bytes sent to the GPU */
private int bytesDrawn; private int bytesDrawn;
public boolean isCompiled = true; public boolean isCompiled = true, addedToQueue = false;
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)
{ {
@ -88,7 +88,6 @@ 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()");
} }
/** /**
@ -183,6 +182,7 @@ public class WorldRenderer
if (!var14) if (!var14)
{ {
var14 = true; var14 = true;
tessellator.reset();
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()));
} }

Loading…
Cancel
Save