From d89f2dc9b8954a7f1754b5aeff194dc28ec795a9 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 7 Oct 2021 21:34:34 -0500 Subject: [PATCH] Refactoring / reformatting --- .../bufferBuilding/LodBufferBuilder.java | 16 +++--- .../com/seibel/lod/objects/LodDimension.java | 56 ++++++------------- .../java/com/seibel/lod/util/LodUtil.java | 6 +- 3 files changed, 29 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java index 77c03671e..b2d71fb5b 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java @@ -424,7 +424,7 @@ public class LodBufferBuilder { bufferLock.lock(); int numbRegionsWide = lodDimension.getWidth(); - long memoryRequired; + long regionMemoryRequired; int numberOfBuffers; previousRegionWidth = numbRegionsWide; @@ -442,10 +442,10 @@ public class LodBufferBuilder { for (int z = 0; z < numbRegionsWide; z++) { - memoryRequired = lodDimension.getRegionRequiredMemory(x, z, LodConfig.CLIENT.graphics.lodTemplate.get()); + regionMemoryRequired = LodUtil.calculateMaximumRegionGpuMemoryUse(x, z, LodConfig.CLIENT.graphics.lodTemplate.get()); // if the memory required is greater than the max buffer capacity divide the memory across multiple buffers - if (memoryRequired < LodUtil.MAX_ALOCATEABLE_DIRECT_MEMORY) + if (regionMemoryRequired < LodUtil.MAX_ALOCATEABLE_DIRECT_MEMORY) { bufferSize[x][z] = 1; buildableBuffers[x][z] = new BufferBuilder[1]; @@ -454,8 +454,8 @@ public class LodBufferBuilder } else { - numberOfBuffers = (int) Math.ceil(memoryRequired / LodUtil.MAX_ALOCATEABLE_DIRECT_MEMORY) + 1; - memoryRequired = LodUtil.MAX_ALOCATEABLE_DIRECT_MEMORY; + numberOfBuffers = (int) Math.ceil(regionMemoryRequired / LodUtil.MAX_ALOCATEABLE_DIRECT_MEMORY) + 1; + regionMemoryRequired = LodUtil.MAX_ALOCATEABLE_DIRECT_MEMORY; bufferSize[x][z] = numberOfBuffers; buildableBuffers[x][z] = new BufferBuilder[numberOfBuffers]; buildableVbos[x][z] = new VertexBuffer[numberOfBuffers]; @@ -465,18 +465,18 @@ public class LodBufferBuilder for (int i = 0; i < bufferSize[x][z]; i++) { - buildableBuffers[x][z][i] = new BufferBuilder((int) memoryRequired); + buildableBuffers[x][z][i] = new BufferBuilder((int) regionMemoryRequired); buildableVbos[x][z][i] = new VertexBuffer(LodUtil.LOD_VERTEX_FORMAT); drawableVbos[x][z][i] = new VertexBuffer(LodUtil.LOD_VERTEX_FORMAT); // create the initial mapped buffers (system memory) GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, buildableVbos[x][z][i].id); - GL15.glBufferData(GL15.GL_ARRAY_BUFFER, memoryRequired, GL45.GL_DYNAMIC_DRAW); + GL15.glBufferData(GL15.GL_ARRAY_BUFFER, regionMemoryRequired, GL45.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, drawableVbos[x][z][i].id); - GL15.glBufferData(GL15.GL_ARRAY_BUFFER, memoryRequired, GL45.GL_DYNAMIC_DRAW); + GL15.glBufferData(GL15.GL_ARRAY_BUFFER, regionMemoryRequired, GL45.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java index 2892b0e5d..8f26d190c 100644 --- a/src/main/java/com/seibel/lod/objects/LodDimension.java +++ b/src/main/java/com/seibel/lod/objects/LodDimension.java @@ -18,24 +18,28 @@ package com.seibel.lod.objects; -import com.seibel.lod.config.LodConfig; -import com.seibel.lod.enums.DistanceGenerationMode; -import com.seibel.lod.enums.GenerationPriority; -import com.seibel.lod.enums.LodTemplate; -import com.seibel.lod.enums.VerticalQuality; -import com.seibel.lod.handlers.LodDimensionFileHandler; -import com.seibel.lod.util.*; -import com.seibel.lod.wrappers.MinecraftWrapper; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.DimensionType; -import net.minecraft.world.server.ServerChunkProvider; -import net.minecraft.world.server.ServerWorld; - import java.io.File; import java.io.IOException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import com.seibel.lod.config.LodConfig; +import com.seibel.lod.enums.DistanceGenerationMode; +import com.seibel.lod.enums.GenerationPriority; +import com.seibel.lod.enums.VerticalQuality; +import com.seibel.lod.handlers.LodDimensionFileHandler; +import com.seibel.lod.util.DataPointUtil; +import com.seibel.lod.util.DetailDistanceUtil; +import com.seibel.lod.util.LevelPosUtil; +import com.seibel.lod.util.LodThreadFactory; +import com.seibel.lod.util.LodUtil; +import com.seibel.lod.wrappers.MinecraftWrapper; + +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.DimensionType; +import net.minecraft.world.server.ServerChunkProvider; +import net.minecraft.world.server.ServerWorld; + /** * This object holds all loaded LOD regions @@ -865,32 +869,6 @@ public class LodDimension return stringBuilder.toString(); } - /** Returns the minimum memory required by the dimension in Bytes */ - public long getRegionRequiredMemory(int x, int z, LodTemplate template) - { - /*return regions[x][z].getMinMemoryNeeded(template);*/ - - /*TODO add memory use calculated with the following cases - switch (LodConfig.CLIENT.graphics.detailDropOff.get()) - { - default: - case BY_BLOCK: - break; - case BY_REGION_FANCY: - break; - case BY_REGION_FAST: - }*/ - - int minDistance = LevelPosUtil.minDistance(LodUtil.REGION_DETAIL_LEVEL, x, z, halfWidth, halfWidth); - int detail = DetailDistanceUtil.getTreeCutDetailFromDistance(minDistance); - int levelToGen = DetailDistanceUtil.getLodDrawDetail(detail); - int size = 1 << (LodUtil.REGION_DETAIL_LEVEL - levelToGen); - int maxVerticalData = DetailDistanceUtil.getMaxVerticalData(detail); - long memoryUse = LodUtil.regionRenderingMemoryUse(x, z, template); - //System.out.println(detail + " " + memoryUse + " " + template.getBufferMemoryForSingleLod(maxVerticalData)); - return memoryUse; - } - public boolean GetIsRegionDirty(int i, int j) { return isRegionDirty[i][j]; diff --git a/src/main/java/com/seibel/lod/util/LodUtil.java b/src/main/java/com/seibel/lod/util/LodUtil.java index b45fd1dc8..9cbb9b50f 100644 --- a/src/main/java/com/seibel/lod/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/util/LodUtil.java @@ -353,13 +353,14 @@ public class LodUtil } /** - * This methods return the number of lods that are going to be rendered in a region in the worst case + * Returns the GPU memory needed if all LODs in + * a the given region are rendered. * * @param regionPosX x region position to check * @param regionPosZ z region position to check * @return number of lods in the region */ - public static long regionRenderingMemoryUse(int regionPosX, int regionPosZ, LodTemplate template) + public static long calculateMaximumRegionGpuMemoryUse(int regionPosX, int regionPosZ, LodTemplate template) { int xRegionSign = (int) Math.signum(regionPosX); int zRegionSign = (int) Math.signum(regionPosZ); @@ -414,6 +415,7 @@ public class LodUtil count *= maxVerticalData; memoryUse += template.getBufferMemoryForSingleLod(maxVerticalData) * count; } + return memoryUse; }