aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/makamys/lodmod/renderer
diff options
context:
space:
mode:
authormakamys <makamys@outlook.com>2021-05-10 08:52:45 +0200
committermakamys <makamys@outlook.com>2021-05-10 08:53:50 +0200
commit4742184583e62864cedf5df8cc4e084c096e47d8 (patch)
tree7261b7c88967742a970d59e63018a99cf577b6b8 /src/main/java/makamys/lodmod/renderer
parent43bdf07caffd8e6b269ade5fe9ccaaf741690c16 (diff)
downloadNeodymium-4742184583e62864cedf5df8cc4e084c096e47d8.tar.gz
Neodymium-4742184583e62864cedf5df8cc4e084c096e47d8.tar.bz2
Neodymium-4742184583e62864cedf5df8cc4e084c096e47d8.zip
Don't hold onto distant Chunk objects
Reduces RAM usage from 4GB to 3GB (peak heap from 1200 MB to 700 MB) in my testing done standing still after spawning
Diffstat (limited to 'src/main/java/makamys/lodmod/renderer')
-rw-r--r--src/main/java/makamys/lodmod/renderer/LODChunk.java7
-rw-r--r--src/main/java/makamys/lodmod/renderer/LODRegion.java3
-rw-r--r--src/main/java/makamys/lodmod/renderer/LODRenderer.java29
3 files changed, 8 insertions, 31 deletions
diff --git a/src/main/java/makamys/lodmod/renderer/LODChunk.java b/src/main/java/makamys/lodmod/renderer/LODChunk.java
index c9bdd5e..46467e5 100644
--- a/src/main/java/makamys/lodmod/renderer/LODChunk.java
+++ b/src/main/java/makamys/lodmod/renderer/LODChunk.java
@@ -12,8 +12,7 @@ import net.minecraft.world.chunk.Chunk;
public class LODChunk {
int x, z;
- Chunk chunk;
- public boolean waitingForData = false;
+ public boolean needsChunk = true;
int lod = 0;
boolean visible;
@@ -127,4 +126,8 @@ public class LODChunk {
LODMod.renderer.setVisible(this, false);
}
+ public void receiveChunk(Chunk chunk) {
+ putSimpleMeshes(SimpleChunkMesh.generateSimpleMeshes(chunk));
+ }
+
}
diff --git a/src/main/java/makamys/lodmod/renderer/LODRegion.java b/src/main/java/makamys/lodmod/renderer/LODRegion.java
index df79ede..0d91e22 100644
--- a/src/main/java/makamys/lodmod/renderer/LODRegion.java
+++ b/src/main/java/makamys/lodmod/renderer/LODRegion.java
@@ -115,8 +115,7 @@ public class LODRegion {
int relZ = chunk.zPosition - regionZ * 32;
if(relX >= 0 && relX < 32 && relZ >= 0 && relZ < 32) {
- data[relX][relZ].chunk = chunk;
- data[relX][relZ].waitingForData = false;
+ data[relX][relZ].receiveChunk(chunk);
return data[relX][relZ];
}
return null;
diff --git a/src/main/java/makamys/lodmod/renderer/LODRenderer.java b/src/main/java/makamys/lodmod/renderer/LODRenderer.java
index 3385c39..9fdaa06 100644
--- a/src/main/java/makamys/lodmod/renderer/LODRenderer.java
+++ b/src/main/java/makamys/lodmod/renderer/LODRenderer.java
@@ -149,8 +149,9 @@ public class LODRenderer {
int chunkX = centerX + x;
int chunkZ = centerZ + z;
- if(getLODChunk(chunkX, chunkZ).chunk == null) {
+ if(getLODChunk(chunkX, chunkZ).needsChunk) {
newServerChunkLoadQueue.add(new ChunkCoordIntPair(chunkX, chunkZ));
+ getLODChunk(chunkX, chunkZ).needsChunk = false;
}
}
}
@@ -445,7 +446,6 @@ public class LODRenderer {
private LODChunk receiveFarChunk(Chunk chunk) {
LODRegion region = getRegionContaining(chunk.xPosition, chunk.zPosition);
- myChunks.add(chunk);
return region.putChunk(chunk);
}
@@ -477,32 +477,7 @@ public class LODRenderer {
return region;
}
- private void loadChunk(int chunkX, int chunkZ) {
- LODRegion region = getRegionContaining(chunkX, chunkZ);
- LODChunk lodChunk = region.getChunkAbsolute(chunkX, chunkZ);
- if(lodChunk == null) {
- ChunkProviderServer chunkProviderServer = Minecraft.getMinecraft().getIntegratedServer().worldServers[0].theChunkProviderServer;
- //Chunk chunk = chunkProviderServer.loadChunk(chunkX, chunkZ);
- Chunk chunk = chunkProviderServer.currentChunkProvider.provideChunk(chunkX, chunkZ);
- /*Chunk chunk = chunkProviderServer.safeLoadChunk(chunkX, chunkZ);
- if(chunk == null) {
- chunk = chunkProviderServer.currentChunkProvider.provideChunk(chunkX, chunkZ);
- }
- if(chunk != null) {
- chunk.populateChunk(chunkProviderServer, chunkProviderServer, chunkX, chunkZ);
- myChunks.add(chunk);
- }*/
- if(chunk != null) {
- myChunks.add(chunk);
- }
- //lodChunk = region.putChunk(new LODChunk(chunk));
- }
- sendChunkToGPU(lodChunk);
- }
-
private void sendChunkToGPU(LODChunk lodChunk) {
- lodChunk.putSimpleMeshes(SimpleChunkMesh.generateSimpleMeshes(lodChunk.chunk));
-
Entity player = (Entity) Minecraft.getMinecraft().getIntegratedServer().getConfigurationManager().playerEntityList.get(0);
lodChunk.tick(player);