From 583e1be2c46d5f6fd3f3b329fc2c9bec986e380d Mon Sep 17 00:00:00 2001 From: LAX1DUDE Date: Sat, 23 Apr 2022 01:05:29 -0700 Subject: [PATCH] added occlusion culling --- .../eaglercraft/glemu/EaglerAdapterGL30.java | 20 +- .../net/minecraft/src/CanvasMajongLogo.java | 31 --- .../net/minecraft/src/EntityRenderer.java | 9 +- .../java/net/minecraft/src/RenderGlobal.java | 255 ++++++++---------- .../java/net/minecraft/src/RenderHelper.java | 8 +- .../java/net/minecraft/src/RenderSorter.java | 2 +- src/main/java/net/minecraft/src/World.java | 3 + .../java/net/minecraft/src/WorldRenderer.java | 87 +++--- 8 files changed, 170 insertions(+), 245 deletions(-) delete mode 100644 src/main/java/net/minecraft/src/CanvasMajongLogo.java diff --git a/src/main/java/net/lax1dude/eaglercraft/glemu/EaglerAdapterGL30.java b/src/main/java/net/lax1dude/eaglercraft/glemu/EaglerAdapterGL30.java index f9735eb..dc55d8d 100644 --- a/src/main/java/net/lax1dude/eaglercraft/glemu/EaglerAdapterGL30.java +++ b/src/main/java/net/lax1dude/eaglercraft/glemu/EaglerAdapterGL30.java @@ -997,20 +997,12 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 { public static final void glDrawOcclusionBB(float posX, float posY, float posZ, float sizeX, float sizeY, float sizeZ) { glPushMatrix(); - glTranslatef(posX - sizeX * 0.0001f, posY - sizeY * 0.0001f, posZ - sizeZ * 0.0001f); - glScalef(sizeX * 1.0002f, sizeY * 1.0002f, sizeZ * 1.0002f); + glTranslatef(posX - sizeX * 0.01f, posY - sizeY * 0.01f, posZ - sizeZ * 0.01f); + glScalef(sizeX * 1.02f, sizeY * 1.02f, sizeZ * 1.02f); matModelV[matModelPointer].store(occlusionModel); _wglUniformMat4fv(occlusion_matrix_m, occlusionModel); _wglDrawArrays(_wGL_TRIANGLES, 0, 36); glPopMatrix(); - // glPushMatrix(); - // glTranslatef(posX + sizeX * 0.0001f, posY + sizeY * 0.0001f, posZ + sizeZ * - // 0.0001f); - // glScalef(sizeX * 0.9998f, sizeY * 0.9998f, sizeZ * 0.9998f); - // matModelV[matModelPointer].store(occlusionModel); - // _wglUniformMat4fv(occlusion_matrix_m, occlusionModel); - // _wglDrawArrays(_wGL_TRIANGLES, 0, 36); - // glPopMatrix(); } @@ -1020,8 +1012,12 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 { public static final boolean glGetQueryResult(int obj) { QueryGL q = queryObjs.get(obj); - return _wglGetQueryObjecti(q, _wGL_QUERY_RESULT_AVAILABLE) == 0 - || _wglGetQueryObjecti(q, _wGL_QUERY_RESULT) > 0; + return _wglGetQueryObjecti(q, _wGL_QUERY_RESULT) > 0; + } + + public static final boolean glGetQueryResultAvailable(int obj) { + QueryGL q = queryObjs.get(obj); + return _wglGetQueryObjecti(q, _wGL_QUERY_RESULT_AVAILABLE) > 0; } public static final int glGenTextures() { diff --git a/src/main/java/net/minecraft/src/CanvasMajongLogo.java b/src/main/java/net/minecraft/src/CanvasMajongLogo.java deleted file mode 100644 index 246c461..0000000 --- a/src/main/java/net/minecraft/src/CanvasMajongLogo.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.minecraft.src; -// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. - -// Jad home page: http://www.kpdus.com/jad.html -// Decompiler options: packimports(3) braces deadcode - -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import javax.imageio.ImageIO; - -class CanvasMajongLogo extends Canvas { - - public CanvasMajongLogo() { - try { - logo = ImageIO.read(new File("resources/gui/logo.png")); - } catch (IOException ioexception) { - } - byte byte0 = 100; - setPreferredSize(new Dimension(byte0, byte0)); - setMinimumSize(new Dimension(byte0, byte0)); - } - - public void paint(Graphics g) { - super.paint(g); - g.drawImage(logo, getWidth() / 2 - logo.getWidth() / 2, 32, null); - } - - private BufferedImage logo; -} diff --git a/src/main/java/net/minecraft/src/EntityRenderer.java b/src/main/java/net/minecraft/src/EntityRenderer.java index 9bd2997..78393e7 100644 --- a/src/main/java/net/minecraft/src/EntityRenderer.java +++ b/src/main/java/net/minecraft/src/EntityRenderer.java @@ -10,6 +10,7 @@ import java.util.Random; import net.lax1dude.eaglercraft.EaglerAdapter; import net.lax1dude.eaglercraft.TextureLocation; +import net.lax1dude.eaglercraft.glemu.EffectPipelineFXAA; import net.minecraft.client.Minecraft; public class EntityRenderer { @@ -426,7 +427,7 @@ public class EntityRenderer { EaglerAdapter.glEnable(2912 /* GL_FOG */); terrainTexture.bindTexture(); RenderHelper.disableStandardItemLighting(); - renderglobal.func_943_a(entityliving, 0, f); + renderglobal.sortAndRender(entityliving, 0, f); EaglerAdapter.glShadeModel(7424 /* GL_FLAT */); RenderHelper.enableStandardItemLighting(); renderglobal.func_951_a(entityliving.getPosition(f), frustrum, f); @@ -451,7 +452,7 @@ public class EntityRenderer { terrainTexture.bindTexture(); if (mc.gameSettings.fancyGraphics) { EaglerAdapter.glColorMask(false, false, false, false); - int l = renderglobal.func_943_a(entityliving, 1, f); + int l = renderglobal.sortAndRender(entityliving, 1, f); EaglerAdapter.glColorMask(true, true, true, true); if (mc.gameSettings.anaglyph) { if (i == 0) { @@ -461,10 +462,10 @@ public class EntityRenderer { } } if (l > 0) { - renderglobal.func_943_a(entityliving, 1, f); + renderglobal.sortAndRender(entityliving, 1, f); } } else { - renderglobal.func_943_a(entityliving, 1, f); + renderglobal.sortAndRender(entityliving, 1, f); } EaglerAdapter.glDepthMask(true); EaglerAdapter.glEnable(2884 /* GL_CULL_FACE */); diff --git a/src/main/java/net/minecraft/src/RenderGlobal.java b/src/main/java/net/minecraft/src/RenderGlobal.java index aa0ca60..201c4c6 100644 --- a/src/main/java/net/minecraft/src/RenderGlobal.java +++ b/src/main/java/net/minecraft/src/RenderGlobal.java @@ -17,7 +17,7 @@ public class RenderGlobal implements IWorldAccess { public RenderGlobal(Minecraft minecraft, RenderEngine renderengine) { tileEntities = new ArrayList(); worldRenderersToUpdate = new ArrayList(); - field_1436_w = false; + field_1436_w = true; field_1435_x = 0; renderDistance = -1; field_1424_I = 2; @@ -33,16 +33,13 @@ public class RenderGlobal implements IWorldAccess { mc = minecraft; renderEngine = renderengine; byte byte0 = 64; - field_1440_s = GLAllocation.generateDisplayLists(byte0 * byte0 * byte0 * 3); - field_1436_w = false; //minecraft.func_6251_l().checkARBOcclusion(); - if (field_1436_w) { - field_1456_c.clear(); - field_1437_v = GLAllocation.createDirectIntBuffer(byte0 * byte0 * byte0); - field_1437_v.clear(); - field_1437_v.position(0); - field_1437_v.limit(byte0 * byte0 * byte0); - //ARBOcclusionQuery.glGenQueriesARB(field_1437_v); + renderListBase = GLAllocation.generateDisplayLists(byte0 * byte0 * byte0 * 2); + this.glOcclusionQuery = new int[byte0 * byte0 * byte0]; + for(int i = 0; i < glOcclusionQuery.length; ++i) { + this.glOcclusionQuery[i] = -1; } + this.occlusionQueryAvailable = new boolean[glOcclusionQuery.length]; + this.occlusionQueryStalled = new long[occlusionQueryAvailable.length]; field_1434_y = GLAllocation.generateDisplayLists(3); EaglerAdapter.glPushMatrix(); EaglerAdapter.glNewList(field_1434_y, 4864 /* GL_COMPILE */); @@ -188,37 +185,37 @@ public class RenderGlobal implements IWorldAccess { for (int k1 = 0; k1 < renderChunksTall; k1++) { for (int l1 = 0; l1 < renderChunksDeep; l1++) { worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1] = new WorldRenderer(worldObj, - tileEntities, j1 * 16, k1 * 16, l1 * 16, 16, field_1440_s + k); - if (field_1436_w) { - worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1].field_1732_z = field_1437_v - .get(l); - } + tileEntities, j1 * 16, k1 * 16, l1 * 16, 16, renderListBase + k); worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1].isWaitingOnOcclusionQuery = false; worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1].isVisible = true; worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1].isInFrustum = true; - worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1].field_1735_w = l++; + worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1].chunkIndex = l++; worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1].markDirty(); sortedWorldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1] = worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1]; worldRenderersToUpdate.add(worldRenderers[(l1 * renderChunksTall + k1) * renderChunksWide + j1]); - k += 3; + k += 2; } } } + forceMarkForNewPosition(); + field_1424_I = 2; + } + + public void forceMarkForNewPosition() { if (worldObj != null) { EntityLiving entityliving = mc.field_22009_h; if (entityliving != null) { - func_956_b(MathHelper.floor_double(((Entity) (entityliving)).posX), + markRenderersForNewPosition(MathHelper.floor_double(((Entity) (entityliving)).posX), MathHelper.floor_double(((Entity) (entityliving)).posY), MathHelper.floor_double(((Entity) (entityliving)).posZ)); Arrays.sort(sortedWorldRenderers, new EntitySorter(entityliving)); } } - field_1424_I = 2; } public void func_951_a(Vec3D vec3d, ICamera icamera, float f) { @@ -275,8 +272,12 @@ public class RenderGlobal implements IWorldAccess { return (new StringBuilder()).append("E: ").append(field_1422_K).append("/").append(field_1423_J).append(". B: ") .append(field_1421_L).append(", I: ").append(field_1423_J - field_1421_L - field_1422_K).toString(); } - - private void func_956_b(int i, int j, int k) { + + /** + * Goes through all the renderers setting new positions on them and those that + * have their position changed are adding to be updated + */ + private void markRenderersForNewPosition(int i, int j, int k) { i -= 8; j -= 8; k -= 8; @@ -326,7 +327,7 @@ public class RenderGlobal implements IWorldAccess { } WorldRenderer worldrenderer = worldRenderers[(i2 * renderChunksTall + l2) * renderChunksWide + j1]; boolean flag = worldrenderer.needsUpdate; - worldrenderer.func_1197_a(k1, i3, j2); + worldrenderer.setPositionAndBoundingBox(k1, i3, j2); if (!flag && worldrenderer.needsUpdate) { worldRenderersToUpdate.add(worldrenderer); } @@ -337,8 +338,16 @@ public class RenderGlobal implements IWorldAccess { } } + + private long lastOcclusionQuery = 0l; + private boolean[] occlusionQueryAvailable; + private long[] occlusionQueryStalled; - public int func_943_a(EntityLiving entityliving, int i, double d) { + /** + * Sorts all renderers based on the passed in entity. Args: entityLiving, + * renderPass, partialTickTime + */ + public int sortAndRender(EntityLiving entityliving, int i, double d) { for (int j = 0; j < 10; j++) { field_21156_R = (field_21156_R + 1) % worldRenderers.length; WorldRenderer worldrenderer = worldRenderers[field_21156_R]; @@ -363,110 +372,94 @@ public class RenderGlobal implements IWorldAccess { double d4 = entityliving.posX - field_1453_f; double d5 = entityliving.posY - field_1452_g; double d6 = entityliving.posZ - field_1451_h; + + int fx = MathHelper.floor_double(d1); + int fy = MathHelper.floor_double(d2); + int fz = MathHelper.floor_double(d3); + if (d4 * d4 + d5 * d5 + d6 * d6 > 16D) { field_1453_f = entityliving.posX; field_1452_g = entityliving.posY; field_1451_h = entityliving.posZ; - func_956_b(MathHelper.floor_double(entityliving.posX), MathHelper.floor_double(entityliving.posY), - MathHelper.floor_double(entityliving.posZ)); + markRenderersForNewPosition(fx, fy, fz); Arrays.sort(sortedWorldRenderers, new EntitySorter(entityliving)); } - int k = 0; - if (field_1436_w && !mc.gameSettings.anaglyph && i == 0) { - int l = 0; - int i1 = 16; - func_962_a(l, i1); - for (int j1 = l; j1 < i1; j1++) { - sortedWorldRenderers[j1].isVisible = true; + + fx = fx >> 4; + fy = MathHelper.floor_double(d2 + entityliving.getEyeHeight()) >> 4; + fz = fz >> 4; + + long queryRate = 50l; + long stallRate = 150l; + + long ct = System.currentTimeMillis(); + if(i == 0) { + for (int j = 0; j < this.sortedWorldRenderers.length; ++j) { + WorldRenderer c = this.sortedWorldRenderers[j]; + int ccx = c.chunkX - fx; + int ccy = c.chunkY - fy; + int ccz = c.chunkZ - fz; + if((ccx < 2 && ccx > -2 && ccy < 2 && ccy > -2 && ccz < 2 && ccz > -2) || glOcclusionQuery[c.chunkIndex] == -1) { + c.isVisible = true; + }else if(!c.canRender() && c.isInFrustum) { + if(occlusionQueryAvailable[c.chunkIndex] && EaglerAdapter.glGetQueryResultAvailable(glOcclusionQuery[c.chunkIndex])) { + c.isVisible = EaglerAdapter.glGetQueryResult(glOcclusionQuery[c.chunkIndex]); + occlusionQueryAvailable[c.chunkIndex] = false; + occlusionQueryStalled[c.chunkIndex] = 0l; + }else if(occlusionQueryStalled[c.chunkIndex] != 0l && ct - occlusionQueryStalled[c.chunkIndex] > stallRate) { + c.isVisible = true; + } + } } - - k += func_952_a(l, i1, i, d); - do { - int byte0 = i1; - i1 *= 2; - if (i1 > sortedWorldRenderers.length) { - i1 = sortedWorldRenderers.length; - } - EaglerAdapter.glDisable(3553 /* GL_TEXTURE_2D */); - EaglerAdapter.glDisable(2896 /* GL_LIGHTING */); - EaglerAdapter.glDisable(3008 /* GL_ALPHA_TEST */); - EaglerAdapter.glDisable(2912 /* GL_FOG */); - EaglerAdapter.glColorMask(false, false, false, false); - EaglerAdapter.glDepthMask(false); - func_962_a(byte0, i1); - EaglerAdapter.glPushMatrix(); - float f = 0.0F; - float f1 = 0.0F; - float f2 = 0.0F; - for (int k1 = byte0; k1 < i1; k1++) { - if (sortedWorldRenderers[k1].canRender()) { - sortedWorldRenderers[k1].isInFrustum = false; - continue; - } - if (!sortedWorldRenderers[k1].isInFrustum) { - sortedWorldRenderers[k1].isVisible = true; - } - if (!sortedWorldRenderers[k1].isInFrustum || sortedWorldRenderers[k1].isWaitingOnOcclusionQuery) { - continue; - } - float f3 = MathHelper.sqrt_float(sortedWorldRenderers[k1].distanceToEntity(entityliving)); - int l1 = (int) (1.0F + f3 / 128F); - if (field_1435_x % l1 != k1 % l1) { - continue; - } - WorldRenderer worldrenderer1 = sortedWorldRenderers[k1]; - float f4 = (float) ((double) worldrenderer1.field_1755_i - d1); - float f5 = (float) ((double) worldrenderer1.field_1754_j - d2); - float f6 = (float) ((double) worldrenderer1.field_1753_k - d3); - float f7 = f4 - f; - float f8 = f5 - f1; - float f9 = f6 - f2; - if (f7 != 0.0F || f8 != 0.0F || f9 != 0.0F) { - EaglerAdapter.glTranslatef(f7, f8, f9); - f += f7; - f1 += f8; - f2 += f9; - } - //ARBOcclusionQuery.glBeginQueryARB(35092 /* GL_SAMPLES_PASSED_ARB */, - // sortedWorldRenderers[k1].field_1732_z); - //sortedWorldRenderers[k1].callOcclusionQueryList(); - //ARBOcclusionQuery.glEndQueryARB(35092 /* GL_SAMPLES_PASSED_ARB */); - //sortedWorldRenderers[k1].isWaitingOnOcclusionQuery = true; - } - - EaglerAdapter.glPopMatrix(); - EaglerAdapter.glColorMask(true, true, true, true); - EaglerAdapter.glDepthMask(true); - EaglerAdapter.glEnable(3553 /* GL_TEXTURE_2D */); - EaglerAdapter.glEnable(3008 /* GL_ALPHA_TEST */); - EaglerAdapter.glEnable(2912 /* GL_FOG */); - k += func_952_a(byte0, i1, i, d); - } while (i1 < sortedWorldRenderers.length); - } else { - k += func_952_a(0, sortedWorldRenderers.length, i, d); } + + int k = func_952_a(0, this.sortedWorldRenderers.length, i, d); + + d2 -= entityliving.getEyeHeight(); + + if(i == 0 && ct - lastOcclusionQuery > queryRate) { + lastOcclusionQuery = ct; + EaglerAdapter.glEnable(EaglerAdapter.GL_CULL_FACE); + EaglerAdapter.glDisable(EaglerAdapter.GL_BLEND); + EaglerAdapter.glColorMask(false, false, false, false); + EaglerAdapter.glDepthMask(false); + EaglerAdapter.glBindOcclusionBB(); + for (int j = 0; j < this.sortedWorldRenderers.length; ++j) { + WorldRenderer c = this.sortedWorldRenderers[j]; + int ccx = c.chunkX - fx; + int ccy = c.chunkY - fy; + int ccz = c.chunkZ - fz; + if(!c.canRender() && c.isInFrustum && !(ccx < 2 && ccx > -2 && ccy < 2 && ccy > -2 && ccz < 2 && ccz > -2)) { + boolean stalled = false; + if(occlusionQueryAvailable[c.chunkIndex]) { + if(occlusionQueryStalled[c.chunkIndex] == 0l) { + occlusionQueryStalled[c.chunkIndex] = ct; + stalled = true; + }else if(ct - occlusionQueryStalled[c.chunkIndex] < stallRate) { + stalled = true; + } + } + if(!stalled) { + occlusionQueryAvailable[c.chunkIndex] = true; + int q = glOcclusionQuery[c.chunkIndex]; + if(q == -1) { + q = glOcclusionQuery[c.chunkIndex] = EaglerAdapter.glCreateQuery(); + } + EaglerAdapter.glBeginQuery(q); + EaglerAdapter.glDrawOcclusionBB((float)(c.posX - d1), (float)(c.posY - d2), (float)(c.posZ - d3), 16, 16, 16); + EaglerAdapter.glEndQuery(); + } + } + } + EaglerAdapter.glEndOcclusionBB(); + EaglerAdapter.glColorMask(true, true, true, true); + EaglerAdapter.glDepthMask(true); + EaglerAdapter.glEnable(EaglerAdapter.GL_CULL_FACE); + } + return k; } - private void func_962_a(int i, int j) { - for (int k = i; k < j; k++) { - if (!sortedWorldRenderers[k].isWaitingOnOcclusionQuery) { - continue; - } - field_1456_c.clear(); - //ARBOcclusionQuery.glGetQueryObjectuARB(sortedWorldRenderers[k].field_1732_z, - // 34919 /* GL_QUERY_RESULT_AVAILABLE_ARB */, field_1456_c); - if (field_1456_c.get(0) != 0) { - sortedWorldRenderers[k].isWaitingOnOcclusionQuery = false; - field_1456_c.clear(); - //ARBOcclusionQuery.glGetQueryObjectuARB(sortedWorldRenderers[k].field_1732_z, - // 34918 /* GL_QUERY_RESULT_ARB */, field_1456_c); - sortedWorldRenderers[k].isVisible = field_1456_c.get(0) != 0; - } - } - - } - private int func_952_a(int i, int j, int k, double d) { field_1415_R.clear(); int l = 0; @@ -498,36 +491,11 @@ public class RenderGlobal implements IWorldAccess { double d1 = entityliving.lastTickPosX + (entityliving.posX - entityliving.lastTickPosX) * d; double d2 = entityliving.lastTickPosY + (entityliving.posY - entityliving.lastTickPosY) * d; double d3 = entityliving.lastTickPosZ + (entityliving.posZ - entityliving.lastTickPosZ) * d; - /* - int k1 = 0; - for (int l1 = 0; l1 < field_1414_S.length; l1++) { - field_1414_S[l1].func_859_b(); - } - for (int i2 = 0; i2 < field_1415_R.size(); i2++) { - WorldRenderer worldrenderer = (WorldRenderer) field_1415_R.get(i2); - int j2 = -1; - for (int k2 = 0; k2 < k1; k2++) { - if (field_1414_S[k2].func_862_a(worldrenderer.field_1755_i, worldrenderer.field_1754_j, - worldrenderer.field_1753_k)) { - j2 = k2; - } - } - - if (j2 < 0) { - j2 = k1++; - field_1414_S[j2].func_861_a(worldrenderer.field_1755_i, worldrenderer.field_1754_j, - worldrenderer.field_1753_k, d1, d2, d3); - } - field_1414_S[j2].func_858_a(worldrenderer.getGLCallListForPass(k)); - } - - func_944_a(k, d); - */ for (int i2 = 0; i2 < field_1415_R.size(); i2++) { WorldRenderer worldrenderer = (WorldRenderer) field_1415_R.get(i2); EaglerAdapter.glPushMatrix(); - EaglerAdapter.glTranslatef((float)(worldrenderer.field_1755_i - d1), (float)(worldrenderer.field_1754_j - d2), (float)(worldrenderer.field_1753_k - d3)); + EaglerAdapter.glTranslatef((float)(worldrenderer.posXMinus - d1), (float)(worldrenderer.posYMinus - d2), (float)(worldrenderer.posZMinus - d3)); EaglerAdapter.glCallList(worldrenderer.getGLCallListForPass(k)); EaglerAdapter.glPopMatrix(); } @@ -1231,10 +1199,11 @@ public class RenderGlobal implements IWorldAccess { private List worldRenderersToUpdate; private WorldRenderer sortedWorldRenderers[]; private WorldRenderer worldRenderers[]; + private int[] glOcclusionQuery; private int renderChunksWide; private int renderChunksTall; private int renderChunksDeep; - private int field_1440_s; + private int renderListBase; private Minecraft mc; private RenderBlocks field_1438_u; private IntBuffer field_1437_v; diff --git a/src/main/java/net/minecraft/src/RenderHelper.java b/src/main/java/net/minecraft/src/RenderHelper.java index 386ef74..3419301 100644 --- a/src/main/java/net/minecraft/src/RenderHelper.java +++ b/src/main/java/net/minecraft/src/RenderHelper.java @@ -27,11 +27,11 @@ public class RenderHelper { public static void enableStandardItemLighting() { EaglerAdapter.glEnable(EaglerAdapter.GL_LIGHTING); EaglerAdapter.glEnable(EaglerAdapter.GL_COLOR_MATERIAL); - EaglerAdapter.glPushMatrix(); - EaglerAdapter.glScalef(1.0F, -1.0F, 1.0F); + //EaglerAdapter.glPushMatrix(); + //EaglerAdapter.glScalef(1.0F, -1.0F, 1.0F); EaglerAdapter.copyModelToLightMatrix(); - //EaglerAdapter.flipLightMatrix(); - EaglerAdapter.glPopMatrix(); + EaglerAdapter.flipLightMatrix(); + //EaglerAdapter.glPopMatrix(); /* EaglerAdapter.glColorMaterial(EaglerAdapter.GL_FRONT_AND_BACK, EaglerAdapter.GL_AMBIENT_AND_DIFFUSE); float var0 = 0.4F; diff --git a/src/main/java/net/minecraft/src/RenderSorter.java b/src/main/java/net/minecraft/src/RenderSorter.java index fe2b4ba..f5a35fd 100644 --- a/src/main/java/net/minecraft/src/RenderSorter.java +++ b/src/main/java/net/minecraft/src/RenderSorter.java @@ -29,7 +29,7 @@ public class RenderSorter implements Comparator { if (d > d1) { return -1; } else { - return worldrenderer.field_1735_w >= worldrenderer1.field_1735_w ? -1 : 1; + return worldrenderer.chunkIndex >= worldrenderer1.chunkIndex ? -1 : 1; } } diff --git a/src/main/java/net/minecraft/src/World.java b/src/main/java/net/minecraft/src/World.java index 8139d89..77a0006 100644 --- a/src/main/java/net/minecraft/src/World.java +++ b/src/main/java/net/minecraft/src/World.java @@ -1452,6 +1452,9 @@ public class World implements IBlockAccess { if (l1 % (long) autosavePeriod == 0L) { saveWorld(false, null); } + if(l1 % 24000 > 12000) { + l1 += 12000; + } worldinfo.setWorldTime(l1); TickUpdates(false); func_4080_j(); diff --git a/src/main/java/net/minecraft/src/WorldRenderer.java b/src/main/java/net/minecraft/src/WorldRenderer.java index 4d775a1..34aa221 100644 --- a/src/main/java/net/minecraft/src/WorldRenderer.java +++ b/src/main/java/net/minecraft/src/WorldRenderer.java @@ -25,11 +25,10 @@ public class WorldRenderer { / 2.0F; glRenderList = i1; posX = -999; - func_1197_a(i, j, k); needsUpdate = false; } - - public void func_1197_a(int i, int j, int k) { + + public void setPositionAndBoundingBox(int i, int j, int k) { if (i == posX && j == posY && k == posZ) { return; } else { @@ -37,36 +36,34 @@ public class WorldRenderer { posX = i; posY = j; posZ = k; - field_1746_q = i + sizeWidth / 2; - field_1743_r = j + sizeHeight / 2; - field_1741_s = k + sizeDepth / 2; - field_1752_l = i;// & 0x3ff; - field_1751_m = j; - field_1750_n = k;// & 0x3ff; - field_1755_i = i - field_1752_l; - field_1754_j = j - field_1751_m; - field_1753_k = k - field_1750_n; + chunkX = i >> 4; + chunkY = j >> 4; + chunkZ = k >> 4; + posXPlus = i + sizeWidth / 2; + posYPlus = j + sizeHeight / 2; + posZPlus = k + sizeDepth / 2; + posXClip = i; + posYClip = j; + posZClip = k; + posXMinus = i - posXClip; + posYMinus = j - posYClip; + posZMinus = k - posZClip; float f = 6F; - field_1736_v = AxisAlignedBB.getBoundingBox((float) i - f, (float) j - f, (float) k - f, + renderBoundingBox = AxisAlignedBB.getBoundingBox((float) i - f, (float) j - f, (float) k - f, (float) (i + sizeWidth) + f, (float) (j + sizeHeight) + f, (float) (k + sizeDepth) + f); - EaglerAdapter.glNewList(glRenderList + 2, 4864 /* GL_COMPILE */); - RenderItem.renderAABB(AxisAlignedBB.getBoundingBoxFromPool((float) field_1752_l - f, - (float) field_1751_m - f, (float) field_1750_n - f, (float) (field_1752_l + sizeWidth) + f, - (float) (field_1751_m + sizeHeight) + f, (float) (field_1750_n + sizeDepth) + f)); - EaglerAdapter.glEndList(); + //RenderItem.renderAABB(AxisAlignedBB.getBoundingBoxFromPool((float) field_1752_l - f, + // (float) field_1751_m - f, (float) field_1750_n - f, (float) (field_1752_l + sizeWidth) + f, + // (float) (field_1751_m + sizeHeight) + f, (float) (field_1750_n + sizeDepth) + f)); markDirty(); return; } } - private void setupGLTranslation() { - EaglerAdapter.glTranslatef(field_1752_l, field_1751_m, field_1750_n); - } - public void updateRenderer() { if (!needsUpdate) { return; } + needsUpdate = false; chunksUpdated++; int i = posX; int j = posY; @@ -103,19 +100,7 @@ public class WorldRenderer { if (!flag2) { flag2 = true; EaglerAdapter.glNewList(glRenderList + i2, 4864 /* GL_COMPILE */); - //EaglerAdapter.glPushMatrix(); - //tessellator.setTranslationF(field_1752_l, field_1751_m, field_1750_n); - //setupGLTranslation(); - /* - float f = 1.000001F; - EaglerAdapter.glTranslatef((float) (-sizeDepth) / 2.0F, (float) (-sizeHeight) / 2.0F, - (float) (-sizeDepth) / 2.0F); - EaglerAdapter.glScalef(f, f, f); - EaglerAdapter.glTranslatef((float) sizeDepth / 2.0F, (float) sizeHeight / 2.0F, - (float) sizeDepth / 2.0F); - */ tessellator.startDrawingQuads(); - //tessellator.setTranslationD(-posX, -posY, -posZ); } if (i2 == 0 && Block.isBlockContainer[i3]) { TileEntity tileentity = chunkcache.getBlockTileEntity(l2, j2, k2); @@ -140,7 +125,6 @@ public class WorldRenderer { if (flag2) { tessellator.draw(); - //EaglerAdapter.glPopMatrix(); EaglerAdapter.glEndList(); tessellator.setTranslationD(0.0D, 0.0D, 0.0D); } else { @@ -165,9 +149,9 @@ public class WorldRenderer { } public float distanceToEntity(Entity entity) { - float f = (float) (entity.posX - (double) field_1746_q); - float f1 = (float) (entity.posY - (double) field_1743_r); - float f2 = (float) (entity.posZ - (double) field_1741_s); + float f = (float) (entity.posX - (double) posXPlus); + float f1 = (float) (entity.posY - (double) posYPlus); + float f2 = (float) (entity.posZ - (double) posZPlus); return f * f + f1 * f1 + f2 * f2; } @@ -197,7 +181,7 @@ public class WorldRenderer { } public void updateInFrustrum(ICamera icamera) { - isInFrustum = icamera.isBoundingBoxInFrustum(field_1736_v); + isInFrustum = renderBoundingBox == null || icamera.isBoundingBoxInFrustum(renderBoundingBox); } public void callOcclusionQueryList() { @@ -223,24 +207,27 @@ public class WorldRenderer { public int posX; public int posY; public int posZ; + public int chunkX; + public int chunkY; + public int chunkZ; public int sizeWidth; public int sizeHeight; public int sizeDepth; - public int field_1755_i; - public int field_1754_j; - public int field_1753_k; - public int field_1752_l; - public int field_1751_m; - public int field_1750_n; + public int posXMinus; + public int posYMinus; + public int posZMinus; + public int posXClip; + public int posYClip; + public int posZClip; public boolean isInFrustum; public boolean skipRenderPass[]; - public int field_1746_q; - public int field_1743_r; - public int field_1741_s; + public int posXPlus; + public int posYPlus; + public int posZPlus; public float field_1740_t; public boolean needsUpdate; - public AxisAlignedBB field_1736_v; - public int field_1735_w; + public AxisAlignedBB renderBoundingBox; + public int chunkIndex; public boolean isVisible; public boolean isWaitingOnOcclusionQuery; public int field_1732_z;