aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/makamys/neodymium/renderer/ChunkMesh.java
diff options
context:
space:
mode:
authormakamys <makamys@outlook.com>2022-06-21 04:46:43 +0200
committermakamys <makamys@outlook.com>2022-06-21 06:09:26 +0200
commitd6b0f3f9978799b26a3ebca1a91ebc110a6b894a (patch)
treea4f7f2124f98c0bbe6b0797228b14d99f32bf1c8 /src/main/java/makamys/neodymium/renderer/ChunkMesh.java
parent6f22d15c8532ee5e5d81a383363a6148e9449ebb (diff)
downloadNeodymium-d6b0f3f9978799b26a3ebca1a91ebc110a6b894a.tar.gz
Neodymium-d6b0f3f9978799b26a3ebca1a91ebc110a6b894a.tar.bz2
Neodymium-d6b0f3f9978799b26a3ebca1a91ebc110a6b894a.zip
Recycle MeshQuad objects
Reduces client thread's RAM allocation rate from ~80 MB/s to ~20 MB/s.
Diffstat (limited to 'src/main/java/makamys/neodymium/renderer/ChunkMesh.java')
-rw-r--r--src/main/java/makamys/neodymium/renderer/ChunkMesh.java10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/main/java/makamys/neodymium/renderer/ChunkMesh.java b/src/main/java/makamys/neodymium/renderer/ChunkMesh.java
index abe9a2d..ff6e6ba 100644
--- a/src/main/java/makamys/neodymium/renderer/ChunkMesh.java
+++ b/src/main/java/makamys/neodymium/renderer/ChunkMesh.java
@@ -19,6 +19,7 @@ import makamys.neodymium.MixinConfigPlugin;
import makamys.neodymium.Neodymium;
import makamys.neodymium.ducks.IWorldRenderer;
import makamys.neodymium.util.BufferWriter;
+import makamys.neodymium.util.RecyclingList;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
@@ -40,6 +41,8 @@ public class ChunkMesh extends Mesh {
public static int usedRAM = 0;
public static int instances = 0;
+ private static RecyclingList<MeshQuad> quadBuf = new RecyclingList<>(() -> new MeshQuad());
+
public ChunkMesh(int x, int y, int z, Flags flags, int quadCount, ByteBuffer buffer, int pass) {
this.x = x;
this.y = y;
@@ -86,13 +89,14 @@ public class ChunkMesh extends Mesh {
ChunkMesh.Flags flags = new ChunkMesh.Flags(t.hasTexture, t.hasBrightness, t.hasColor, t.hasNormals);
- List<MeshQuad> quads = new ArrayList<>();
+ quadBuf.reset();
for(int quadI = 0; quadI < t.vertexCount / 4; quadI++) {
- MeshQuad quad = new MeshQuad(t.rawBuffer, quadI * 32, flags, tessellatorXOffset, tessellatorYOffset, tessellatorZOffset);
- quads.add(quad);
+ quadBuf.next().setState(t.rawBuffer, quadI * 32, flags, tessellatorXOffset, tessellatorYOffset, tessellatorZOffset);
}
+ List<MeshQuad> quads = quadBuf.getAsList();
+
if(Config.simplifyChunkMeshes) {
ArrayList<ArrayList<MeshQuad>> quadsByPlaneDir = new ArrayList<>(); // XY, XZ, YZ
for(int i = 0; i < 3; i++) {