> futuresBuffer = bufferBuilderThreads.invokeAll(nodeToRenderThreads);
@@ -348,49 +367,47 @@ public class LodBufferBuilder
}
}
long executeEnd = System.currentTimeMillis();
-
-
+
+
long endTime = System.currentTimeMillis();
@SuppressWarnings("unused")
long buildTime = endTime - startTime;
@SuppressWarnings("unused")
long executeTime = executeEnd - executeStart;
-
+
// ClientProxy.LOGGER.info("Thread Build time: " + buildTime + " ms" + '\n' +
// "thread execute time: " + executeTime + " ms");
-
+
// mark that the buildable buffers as ready to swap
switchVbos = true;
- }
- catch (Exception e)
+ } catch (Exception e)
{
ClientProxy.LOGGER.warn("\"LodNodeBufferBuilder.generateLodBuffersAsync\" ran into trouble: ");
e.printStackTrace();
- }
- finally
+ } finally
{
// regardless of if we successfully created the buffers
// we are done generating.
generatingBuffers = false;
-
+
// clean up any potentially open resources
if (buildableBuffers != null)
closeBuffers(fullRegen, lodDim);
-
+
// upload the new buffers
uploadBuffers(fullRegen, lodDim);
bufferLock.unlock();
}
-
+
});
-
+
mainGenThread.execute(thread);
}
-
+
//===============================//
// BufferBuilder related methods //
//===============================//
-
+
/**
* Called from the LodRenderer to create the
* BufferBuilders.
@@ -401,29 +418,51 @@ public class LodBufferBuilder
{
bufferLock.lock();
int numbRegionsWide = lodDimension.getWidth();
- int bufferMaxCapacity;
-
+ long memoryRequired;
+ int numberOfBuffers;
+
previousRegionWidth = numbRegionsWide;
- buildableBuffers = new BufferBuilder[numbRegionsWide][numbRegionsWide];
-
- buildableVbos = new VertexBuffer[numbRegionsWide][numbRegionsWide];
- drawableVbos = new VertexBuffer[numbRegionsWide][numbRegionsWide];
-
+ bufferSize = new int[numbRegionsWide][numbRegionsWide];
+ buildableBuffers = new BufferBuilder[numbRegionsWide][numbRegionsWide][];
+
+ buildableVbos = new VertexBuffer[numbRegionsWide][numbRegionsWide][];
+ drawableVbos = new VertexBuffer[numbRegionsWide][numbRegionsWide][];
+
for (int x = 0; x < numbRegionsWide; x++)
{
for (int z = 0; z < numbRegionsWide; z++)
{
- bufferMaxCapacity = lodDimension.getMemoryRequired(x, z, LodConfig.CLIENT.graphics.lodTemplate.get());
- buildableBuffers[x][z] = new BufferBuilder(bufferMaxCapacity);
-
- buildableVbos[x][z] = new VertexBuffer(LodRenderer.LOD_VERTEX_FORMAT);
- drawableVbos[x][z] = new VertexBuffer(LodRenderer.LOD_VERTEX_FORMAT);
+ memoryRequired = lodDimension.getMemoryRequired(x, z, LodConfig.CLIENT.graphics.lodTemplate.get());
+ //if the memory required is less than the max buffer capacity we divide the memory across multiple buffers
+ if (BUFFER_MAX_CAPACITY > memoryRequired)
+ {
+ bufferSize[x][z] = 1;
+ buildableBuffers[x][z] = new BufferBuilder[1];
+ buildableVbos[x][z] = new VertexBuffer[1];
+ drawableVbos[x][z] = new VertexBuffer[1];
+ } else
+ {
+ numberOfBuffers = (int) Math.ceil(memoryRequired / BUFFER_MAX_CAPACITY)+1;
+ System.out.println(numberOfBuffers);
+ memoryRequired = BUFFER_MAX_CAPACITY;
+ bufferSize[x][z] = numberOfBuffers;
+ buildableBuffers[x][z] = new BufferBuilder[numberOfBuffers];
+ buildableVbos[x][z] = new VertexBuffer[numberOfBuffers];
+ drawableVbos[x][z] = new VertexBuffer[numberOfBuffers];
+ }
+
+ for (int i = 0; i < bufferSize[x][z]; i++)
+ {
+ buildableBuffers[x][z][i] = new BufferBuilder((int) memoryRequired);
+ buildableVbos[x][z][i] = new VertexBuffer(LodRenderer.LOD_VERTEX_FORMAT);
+ drawableVbos[x][z][i] = new VertexBuffer(LodRenderer.LOD_VERTEX_FORMAT);
+ }
}
}
-
+
bufferLock.unlock();
}
-
+
/**
* sets the buffers and Vbos to null, forcing them to be recreated.
*
@@ -432,14 +471,14 @@ public class LodBufferBuilder
public void destroyBuffers()
{
bufferLock.lock();
-
+
buildableBuffers = null;
buildableVbos = null;
drawableVbos = null;
-
+
bufferLock.unlock();
}
-
+
/**
* Calls begin on each of the buildable BufferBuilders.
*/
@@ -454,14 +493,18 @@ public class LodBufferBuilder
// for some reason BufferBuilder.vertexCounts
// isn't reset unless this is called, which can cause
// a false indexOutOfBoundsException
- buildableBuffers[x][z].discard();
-
- buildableBuffers[x][z].begin(GL11.GL_QUADS, LodRenderer.LOD_VERTEX_FORMAT);
+
+ for (int i = 0; i < buildableBuffers[x][z].length; i++)
+ {
+ buildableBuffers[x][z][i].discard();
+
+ buildableBuffers[x][z][i].begin(GL11.GL_QUADS, LodRenderer.LOD_VERTEX_FORMAT);
+ }
}
}
}
}
-
+
/**
* Calls end on each of the buildable BufferBuilders.
*/
@@ -469,48 +512,54 @@ public class LodBufferBuilder
{
for (int x = 0; x < buildableBuffers.length; x++)
for (int z = 0; z < buildableBuffers.length; z++)
- if (buildableBuffers[x][z] != null && buildableBuffers[x][z].building() && (fullRegen || lodDim.doesRegionNeedBufferRegen(x, z)))
- buildableBuffers[x][z].end();
+ for (int i = 0; i < buildableBuffers[x][z].length; i++)
+ {
+ if (buildableBuffers[x][z][i] != null && buildableBuffers[x][z][i].building() && (fullRegen || lodDim.doesRegionNeedBufferRegen(x, z)))
+ {
+ buildableBuffers[x][z][i].end();
+ }
+ }
}
-
+
/**
* Upload all buildableBuffers to the GPU.
*/
private void uploadBuffers(boolean fullRegen, LodDimension lodDim)
{
GlProxy glProxy = GlProxy.getInstance();
-
+
try
{
// make sure we are uploading to a different OpenGL context,
// to prevent interference (IE stuttering) with the Minecraft context.
glProxy.setGlContext(GlProxyContext.LOD_BUILDER);
-
+
for (int x = 0; x < buildableVbos.length; x++)
{
for (int z = 0; z < buildableVbos.length; z++)
{
if (fullRegen || lodDim.doesRegionNeedBufferRegen(x, z))
{
- ByteBuffer builderBuffer = buildableBuffers[x][z].popNextBuffer().getSecond();
- vboUpload(buildableVbos[x][z], builderBuffer);
- lodDim.setRegenRegionBufferByArrayIndex(x, z, false);
+ for (int i = 0; i < buildableBuffers[x][z].length; i++)
+ {
+ ByteBuffer builderBuffer = buildableBuffers[x][z][i].popNextBuffer().getSecond();
+ vboUpload(buildableVbos[x][z][i], builderBuffer);
+ lodDim.setRegenRegionBufferByArrayIndex(x, z, false);
+ }
}
}
}
- }
- catch (IllegalStateException e)
+ } catch (IllegalStateException e)
{
ClientProxy.LOGGER.error(LodBufferBuilder.class.getSimpleName() + " - UploadBuffers failed: " + e.getMessage());
e.printStackTrace();
- }
- finally
+ } finally
{
// make sure the context is disabled
glProxy.setGlContext(GlProxyContext.NONE);
}
}
-
+
/**
* Uploads the uploadBuffer into the VBO in GPU memory.
*/
@@ -521,22 +570,22 @@ public class LodBufferBuilder
{
// this is how many points will be rendered
vbo.vertexCount = (uploadBuffer.remaining() / vbo.format.getVertexSize());
-
+
GL15C.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo.id);
-
+
// subData only works if the memory is allocated beforehand.
GL15C.glBufferData(GL15.GL_ARRAY_BUFFER, uploadBuffer.remaining(), GL15C.GL_DYNAMIC_DRAW);
-
+
// interestingly bufferSubData renders faster than glMapBuffer
// even though OpenGLInsights-AsynchronousBufferTransfers says glMapBuffer
// is faster for transferring data. They must put the data in different memory
// or something.
GL15C.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, uploadBuffer);
-
+
GL15C.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}
}
-
+
/**
* Get the newly created VBOs
*/
@@ -546,35 +595,35 @@ public class LodBufferBuilder
// since this is called on the main render thread
if (bufferLock.tryLock())
{
- VertexBuffer[][] tmpVbo = drawableVbos;
+ VertexBuffer[][][] tmpVbo = drawableVbos;
drawableVbos = buildableVbos;
buildableVbos = tmpVbo;
-
+
drawableCenterChunkPos = buildableCenterChunkPos;
-
+
// the vbos have been swapped
switchVbos = false;
bufferLock.unlock();
}
-
+
return new VertexBuffersAndOffset(drawableVbos, drawableCenterChunkPos);
}
-
+
/**
* A simple container to pass multiple objects back in the getVertexBuffers method.
*/
public class VertexBuffersAndOffset
{
- public VertexBuffer[][] vbos;
+ public VertexBuffer[][][] vbos;
public ChunkPos drawableCenterChunkPos;
-
- public VertexBuffersAndOffset(VertexBuffer[][] newVbos, ChunkPos newDrawableCenterChunkPos)
+
+ public VertexBuffersAndOffset(VertexBuffer[][][] newVbos, ChunkPos newDrawableCenterChunkPos)
{
vbos = newVbos;
drawableCenterChunkPos = newDrawableCenterChunkPos;
}
}
-
+
/**
* If this is true the buildable near and far
* buffers have been generated and are ready to be
@@ -584,5 +633,19 @@ public class LodBufferBuilder
{
return switchVbos;
}
-
+
+
+ /**
+ *
+ */
+ public void setPartialRegen()
+ {
+ }
+
+ /**
+ *
+ */
+ public void setFullRegen()
+ {
+ }
}
diff --git a/src/main/java/com/seibel/lod/builders/lodTemplates/AbstractLodTemplate.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/AbstractLodTemplate.java
similarity index 96%
rename from src/main/java/com/seibel/lod/builders/lodTemplates/AbstractLodTemplate.java
rename to src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/AbstractLodTemplate.java
index 1702857b2..8c47febaa 100644
--- a/src/main/java/com/seibel/lod/builders/lodTemplates/AbstractLodTemplate.java
+++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/AbstractLodTemplate.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package com.seibel.lod.builders.lodTemplates;
+package com.seibel.lod.builders.bufferBuilding.lodTemplates;
import java.util.Map;
diff --git a/src/main/java/com/seibel/lod/builders/lodTemplates/Box.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/Box.java
similarity index 99%
rename from src/main/java/com/seibel/lod/builders/lodTemplates/Box.java
rename to src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/Box.java
index 4f460ceed..8804b7fb3 100644
--- a/src/main/java/com/seibel/lod/builders/lodTemplates/Box.java
+++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/Box.java
@@ -1,4 +1,4 @@
-package com.seibel.lod.builders.lodTemplates;
+package com.seibel.lod.builders.bufferBuilding.lodTemplates;
import java.util.Arrays;
import java.util.HashMap;
diff --git a/src/main/java/com/seibel/lod/builders/lodTemplates/CubicLodTemplate.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/CubicLodTemplate.java
similarity index 98%
rename from src/main/java/com/seibel/lod/builders/lodTemplates/CubicLodTemplate.java
rename to src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/CubicLodTemplate.java
index 4bde077b2..810d19129 100644
--- a/src/main/java/com/seibel/lod/builders/lodTemplates/CubicLodTemplate.java
+++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/CubicLodTemplate.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package com.seibel.lod.builders.lodTemplates;
+package com.seibel.lod.builders.bufferBuilding.lodTemplates;
import java.util.Map;
diff --git a/src/main/java/com/seibel/lod/builders/lodTemplates/DynamicLodTemplate.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/DynamicLodTemplate.java
similarity index 96%
rename from src/main/java/com/seibel/lod/builders/lodTemplates/DynamicLodTemplate.java
rename to src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/DynamicLodTemplate.java
index 47d1384af..395020bca 100644
--- a/src/main/java/com/seibel/lod/builders/lodTemplates/DynamicLodTemplate.java
+++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/DynamicLodTemplate.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package com.seibel.lod.builders.lodTemplates;
+package com.seibel.lod.builders.bufferBuilding.lodTemplates;
import java.util.Map;
diff --git a/src/main/java/com/seibel/lod/builders/lodTemplates/TriangularLodTemplate.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/TriangularLodTemplate.java
similarity index 96%
rename from src/main/java/com/seibel/lod/builders/lodTemplates/TriangularLodTemplate.java
rename to src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/TriangularLodTemplate.java
index d16c76f1d..195469514 100644
--- a/src/main/java/com/seibel/lod/builders/lodTemplates/TriangularLodTemplate.java
+++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/lodTemplates/TriangularLodTemplate.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package com.seibel.lod.builders.lodTemplates;
+package com.seibel.lod.builders.bufferBuilding.lodTemplates;
import java.util.Map;
diff --git a/src/main/java/com/seibel/lod/builders/LodBuilder.java b/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java
similarity index 99%
rename from src/main/java/com/seibel/lod/builders/LodBuilder.java
rename to src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java
index 68ace1bf4..8f79af46f 100644
--- a/src/main/java/com/seibel/lod/builders/LodBuilder.java
+++ b/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package com.seibel.lod.builders;
+package com.seibel.lod.builders.lodBuilding;
import java.awt.Color;
import java.util.List;
diff --git a/src/main/java/com/seibel/lod/builders/LodBuilderConfig.java b/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilderConfig.java
similarity index 98%
rename from src/main/java/com/seibel/lod/builders/LodBuilderConfig.java
rename to src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilderConfig.java
index 5bbab40c2..679779d6e 100644
--- a/src/main/java/com/seibel/lod/builders/LodBuilderConfig.java
+++ b/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilderConfig.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package com.seibel.lod.builders;
+package com.seibel.lod.builders.lodBuilding;
import com.seibel.lod.enums.DistanceGenerationMode;
diff --git a/src/main/java/com/seibel/lod/builders/worldGeneration/LodNodeGenWorker.java b/src/main/java/com/seibel/lod/builders/worldGeneration/LodNodeGenWorker.java
index b6c367172..93c639b6a 100644
--- a/src/main/java/com/seibel/lod/builders/worldGeneration/LodNodeGenWorker.java
+++ b/src/main/java/com/seibel/lod/builders/worldGeneration/LodNodeGenWorker.java
@@ -27,8 +27,8 @@ import java.util.concurrent.Executors;
import java.util.function.Supplier;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import com.seibel.lod.builders.LodBuilder;
-import com.seibel.lod.builders.LodBuilderConfig;
+import com.seibel.lod.builders.lodBuilding.LodBuilder;
+import com.seibel.lod.builders.lodBuilding.LodBuilderConfig;
import com.seibel.lod.config.LodConfig;
import com.seibel.lod.enums.DistanceGenerationMode;
import com.seibel.lod.objects.LodDimension;
diff --git a/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java b/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java
index a51998ade..a81db12c0 100644
--- a/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java
+++ b/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java
@@ -6,7 +6,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
-import com.seibel.lod.builders.LodBuilder;
+import com.seibel.lod.builders.lodBuilding.LodBuilder;
import com.seibel.lod.config.LodConfig;
import com.seibel.lod.enums.DistanceGenerationMode;
import com.seibel.lod.objects.LodDimension;
diff --git a/src/main/java/com/seibel/lod/enums/LodTemplate.java b/src/main/java/com/seibel/lod/enums/LodTemplate.java
index 7d4a04909..180008dc2 100644
--- a/src/main/java/com/seibel/lod/enums/LodTemplate.java
+++ b/src/main/java/com/seibel/lod/enums/LodTemplate.java
@@ -17,10 +17,10 @@
*/
package com.seibel.lod.enums;
-import com.seibel.lod.builders.lodTemplates.AbstractLodTemplate;
-import com.seibel.lod.builders.lodTemplates.CubicLodTemplate;
-import com.seibel.lod.builders.lodTemplates.DynamicLodTemplate;
-import com.seibel.lod.builders.lodTemplates.TriangularLodTemplate;
+import com.seibel.lod.builders.bufferBuilding.lodTemplates.AbstractLodTemplate;
+import com.seibel.lod.builders.bufferBuilding.lodTemplates.CubicLodTemplate;
+import com.seibel.lod.builders.bufferBuilding.lodTemplates.DynamicLodTemplate;
+import com.seibel.lod.builders.bufferBuilding.lodTemplates.TriangularLodTemplate;
/**
* Cubic, Triangular, Dynamic
diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java
index 7332e7190..4dca1dc54 100644
--- a/src/main/java/com/seibel/lod/objects/LodDimension.java
+++ b/src/main/java/com/seibel/lod/objects/LodDimension.java
@@ -870,7 +870,7 @@ public class LodDimension
}
/** Returns the minimum memory required by the dimension in Bytes */
- public int getMemoryRequired(int x, int z, LodTemplate template)
+ public long getMemoryRequired(int x, int z, LodTemplate template)
{
/*return regions[x][z].getMinMemoryNeeded(template);*/
@@ -901,8 +901,8 @@ public class LodDimension
int levelToGen = DetailDistanceUtil.getLodDrawDetail(detail);
int size = 1 << (LodUtil.REGION_DETAIL_LEVEL - levelToGen);
int maxVerticalData = DetailDistanceUtil.getMaxVerticalData(detail);
- int memoryUse = LodUtil.regionRenderingMemoryUse(x,z,template);
- System.out.println(detail + " " + memoryUse + " " + template.getBufferMemoryForSingleLod(maxVerticalData));
+ long memoryUse = LodUtil.regionRenderingMemoryUse(x,z,template);
+ //System.out.println(detail + " " + memoryUse + " " + template.getBufferMemoryForSingleLod(maxVerticalData));
return memoryUse;
//return memoryUse;
}
diff --git a/src/main/java/com/seibel/lod/proxy/ClientProxy.java b/src/main/java/com/seibel/lod/proxy/ClientProxy.java
index 75eded8de..d351e9762 100644
--- a/src/main/java/com/seibel/lod/proxy/ClientProxy.java
+++ b/src/main/java/com/seibel/lod/proxy/ClientProxy.java
@@ -22,8 +22,8 @@ import org.apache.logging.log4j.Logger;
import org.lwjgl.glfw.GLFW;
import com.mojang.blaze3d.matrix.MatrixStack;
-import com.seibel.lod.builders.LodBufferBuilder;
-import com.seibel.lod.builders.LodBuilder;
+import com.seibel.lod.builders.bufferBuilding.LodBufferBuilder;
+import com.seibel.lod.builders.lodBuilding.LodBuilder;
import com.seibel.lod.builders.worldGeneration.LodNodeGenWorker;
import com.seibel.lod.builders.worldGeneration.LodWorldGenerator;
import com.seibel.lod.config.LodConfig;
diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java
index 457ac3d61..cf5e30428 100644
--- a/src/main/java/com/seibel/lod/render/LodRenderer.java
+++ b/src/main/java/com/seibel/lod/render/LodRenderer.java
@@ -27,8 +27,8 @@ import org.lwjgl.opengl.NVFogDistance;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
-import com.seibel.lod.builders.LodBufferBuilder;
-import com.seibel.lod.builders.LodBufferBuilder.VertexBuffersAndOffset;
+import com.seibel.lod.builders.bufferBuilding.LodBufferBuilder;
+import com.seibel.lod.builders.bufferBuilding.LodBufferBuilder.VertexBuffersAndOffset;
import com.seibel.lod.config.LodConfig;
import com.seibel.lod.enums.DebugMode;
import com.seibel.lod.enums.DetailDropOff;
@@ -95,7 +95,7 @@ public class LodRenderer
/**
* Each VertexBuffer represents 1 region
*/
- private VertexBuffer[][] vbos;
+ private VertexBuffer[][][] vbos;
public static final VertexFormat LOD_VERTEX_FORMAT = DefaultVertexFormats.POSITION_COLOR;
private ChunkPos vbosCenter = new ChunkPos(0,0);
@@ -270,20 +270,23 @@ public class LodRenderer
int halfWidth = vbos.length / 2;
int quarterWidth = vbos.length / 4;
- for (int i = 0; i < vbos.length; i++)
+ for (int x = 0; x < vbos.length; x++)
{
- for (int j = 0; j < vbos.length; j++)
+ for (int z = 0; z < vbos.length; z++)
{
- RegionPos vboPos = new RegionPos(i + lodDim.getCenterRegionPosX() - lodDim.getWidth() / 2, j + lodDim.getCenterRegionPosZ() - lodDim.getWidth() / 2);
+ RegionPos vboPos = new RegionPos(x + lodDim.getCenterRegionPosX() - lodDim.getWidth() / 2, z + lodDim.getCenterRegionPosZ() - lodDim.getWidth() / 2);
if (cullingDisabled || RenderUtil.isRegionInViewFrustum(renderInfo.getBlockPosition(), cameraDir, vboPos.blockPos()))
{
- if ((i > halfWidth - quarterWidth && i < halfWidth + quarterWidth) && (j > halfWidth - quarterWidth && j < halfWidth + quarterWidth))
+ if ((x > halfWidth - quarterWidth && x < halfWidth + quarterWidth) && (z > halfWidth - quarterWidth && z < halfWidth + quarterWidth))
setupFog(fogSettings.near.distance, fogSettings.near.quality);
else
setupFog(fogSettings.far.distance, fogSettings.far.quality);
- sendLodsToGpuAndDraw(vbos[i][j], modelViewMatrix);
+ for(int i = 0; i < lodBufferBuilder.bufferSize[x][z]; i++)
+ {
+ sendLodsToGpuAndDraw(vbos[x][z][i], modelViewMatrix);
+ }
}
}
}
diff --git a/src/main/java/com/seibel/lod/util/LodUtil.java b/src/main/java/com/seibel/lod/util/LodUtil.java
index 78bf65bde..a97ca2334 100644
--- a/src/main/java/com/seibel/lod/util/LodUtil.java
+++ b/src/main/java/com/seibel/lod/util/LodUtil.java
@@ -341,7 +341,7 @@ public class LodUtil
* @param regionPosZ z region position to check
* @return number of lods in the region
*/
- public static int regionRenderingMemoryUse(int regionPosX, int regionPosZ, LodTemplate template)
+ public static long regionRenderingMemoryUse(int regionPosX, int regionPosZ, LodTemplate template)
{
int xRegionSign = (int) Math.signum(regionPosX);
int zRegionSign = (int) Math.signum(regionPosZ);
@@ -364,7 +364,7 @@ public class LodUtil
int count;
int minDistance;
int maxDistance;
- int memoryUse = 0;
+ long memoryUse = 0;
int number = 0;
for(byte detailLevel = BLOCK_DETAIL_LEVEL; detailLevel <= REGION_DETAIL_LEVEL; detailLevel++)
{
@@ -398,7 +398,6 @@ public class LodUtil
count *= maxVerticalData;
memoryUse += template.getBufferMemoryForSingleLod(maxVerticalData) * count;
}
- System.out.println(number);
return memoryUse;
}