diff options
author | makamys <makamys@outlook.com> | 2022-06-21 04:46:43 +0200 |
---|---|---|
committer | makamys <makamys@outlook.com> | 2022-06-21 06:09:26 +0200 |
commit | d6b0f3f9978799b26a3ebca1a91ebc110a6b894a (patch) | |
tree | a4f7f2124f98c0bbe6b0797228b14d99f32bf1c8 /src/main/java/makamys/neodymium/renderer/ChunkMesh.java | |
parent | 6f22d15c8532ee5e5d81a383363a6148e9449ebb (diff) | |
download | Neodymium-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.java | 10 |
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++) { |