diff --git a/src/main/java/team/chisel/client/render/SubmapManagerAntiblock.java b/src/main/java/team/chisel/client/render/SubmapManagerAntiblock.java index 0a078081..13e52042 100644 --- a/src/main/java/team/chisel/client/render/SubmapManagerAntiblock.java +++ b/src/main/java/team/chisel/client/render/SubmapManagerAntiblock.java @@ -75,7 +75,13 @@ public class SubmapManagerAntiblock extends SubmapManagerBase { }; @SideOnly(Side.CLIENT) - private RenderBlocksCTMFullbright rb; + private static ThreadLocal renderBlocksThreadLocal; + + private static void initStatics() { + if (renderBlocksThreadLocal == null) { + renderBlocksThreadLocal = ThreadLocal.withInitial(RenderBlocksCTMFullbright::new); + } + } private String color; private TextureSubmap submap, submapSmall; @@ -99,9 +105,8 @@ public class SubmapManagerAntiblock extends SubmapManagerBase { @Override @SideOnly(Side.CLIENT) public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) { - if (rb == null) { - rb = new RenderBlocksCTMFullbright(); - } + initStatics(); + RenderBlocksCTMFullbright rb = renderBlocksThreadLocal.get(); rb.setRenderBoundsFromBlock(block); rb.submap = submap; rb.submapSmall = submapSmall; diff --git a/src/main/java/team/chisel/client/render/SubmapManagerCarpetFloor.java b/src/main/java/team/chisel/client/render/SubmapManagerCarpetFloor.java index 69e39131..cd4bd290 100644 --- a/src/main/java/team/chisel/client/render/SubmapManagerCarpetFloor.java +++ b/src/main/java/team/chisel/client/render/SubmapManagerCarpetFloor.java @@ -14,7 +14,13 @@ import team.chisel.ctmlib.TextureSubmap; public class SubmapManagerCarpetFloor extends SubmapManagerBase { @SideOnly(Side.CLIENT) - private RenderBlocksCTM rb; + private static ThreadLocal renderBlocksThreadLocal; + + private static void initStatics() { + if (renderBlocksThreadLocal == null) { + renderBlocksThreadLocal = ThreadLocal.withInitial(RenderBlocksCTM::new); + } + } private TextureSubmap submap; private TextureSubmap submapSmall; @@ -45,9 +51,8 @@ public class SubmapManagerCarpetFloor extends SubmapManagerBase { @Override @SideOnly(Side.CLIENT) public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) { - if (rb == null) { - rb = new RenderBlocksCTM(); - } + initStatics(); + RenderBlocksCTM rb = renderBlocksThreadLocal.get(); rb.setRenderBoundsFromBlock(block); rb.submap = submap; rb.submapSmall = submapSmall; diff --git a/src/main/java/team/chisel/client/render/SubmapManagerCombinedCTM.java b/src/main/java/team/chisel/client/render/SubmapManagerCombinedCTM.java index 88860c89..820b093e 100644 --- a/src/main/java/team/chisel/client/render/SubmapManagerCombinedCTM.java +++ b/src/main/java/team/chisel/client/render/SubmapManagerCombinedCTM.java @@ -99,7 +99,13 @@ public class SubmapManagerCombinedCTM extends SubmapManagerBase { } @SideOnly(Side.CLIENT) - private RenderBlocksCTM rb; + private static ThreadLocal renderBlocksThreadLocal; + + private static void initStatics() { + if (renderBlocksThreadLocal == null) { + renderBlocksThreadLocal = new ThreadLocal<>(); + } + } private TextureSubmap submap, smallSubmap; private int size; @@ -133,8 +139,11 @@ public class SubmapManagerCombinedCTM extends SubmapManagerBase { @Override @SideOnly(Side.CLIENT) public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) { + initStatics(); + RenderBlocksCombinedCTM rb = renderBlocksThreadLocal.get(); if (rb == null) { rb = new RenderBlocksCombinedCTM(); + renderBlocksThreadLocal.set(rb); } rb.setRenderBoundsFromBlock(block); return rb; diff --git a/src/main/java/team/chisel/client/render/SubmapManagerSlab.java b/src/main/java/team/chisel/client/render/SubmapManagerSlab.java index 339987e0..9b7b2fcc 100644 --- a/src/main/java/team/chisel/client/render/SubmapManagerSlab.java +++ b/src/main/java/team/chisel/client/render/SubmapManagerSlab.java @@ -16,7 +16,13 @@ import team.chisel.ctmlib.TextureSubmap; public class SubmapManagerSlab implements ISubmapManager { @SideOnly(Side.CLIENT) - private RenderBlocksCTM rb; + private static ThreadLocal renderBlocksThreadLocal; + + private static void initStatics() { + if (renderBlocksThreadLocal == null) { + renderBlocksThreadLocal = ThreadLocal.withInitial(RenderBlocksCTM::new); + } + } private TextureSubmap submap; private TextureSubmap submapSmall; @@ -49,9 +55,8 @@ public class SubmapManagerSlab implements ISubmapManager { @Override @SideOnly(Side.CLIENT) public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) { - if (rb == null) { - rb = new RenderBlocksCTM(); - } + initStatics(); + RenderBlocksCTM rb = renderBlocksThreadLocal.get(); rb.setRenderBoundsFromBlock(block); rb.submap = submap; rb.submapSmall = submapSmall; diff --git a/src/main/java/team/chisel/client/render/SubmapManagerSpecialMaterial.java b/src/main/java/team/chisel/client/render/SubmapManagerSpecialMaterial.java index 2e5719d4..4466dc1e 100644 --- a/src/main/java/team/chisel/client/render/SubmapManagerSpecialMaterial.java +++ b/src/main/java/team/chisel/client/render/SubmapManagerSpecialMaterial.java @@ -48,7 +48,14 @@ public class SubmapManagerSpecialMaterial extends SubmapManagerBase { } }; - private RenderBlocksCTMFullbright renderBlocksFullbright; + @SideOnly(Side.CLIENT) + private static ThreadLocal renderBlocksThreadLocal; + + private static void initStatics() { + if (renderBlocksThreadLocal == null) { + renderBlocksThreadLocal = ThreadLocal.withInitial(RenderBlocksCTMFullbright::new); + } + } private String color; private MaterialType materialType; @@ -76,9 +83,8 @@ public class SubmapManagerSpecialMaterial extends SubmapManagerBase { @Override @SideOnly(Side.CLIENT) public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) { - if (renderBlocksFullbright == null) { - renderBlocksFullbright = new RenderBlocksCTMFullbright(); - } + initStatics(); + RenderBlocksCTMFullbright renderBlocksFullbright = renderBlocksThreadLocal.get(); renderBlocksFullbright.setRenderBoundsFromBlock(block); renderBlocksFullbright.submap = submap; renderBlocksFullbright.submapSmall = submapSmall; diff --git a/src/main/java/team/chisel/client/render/SubmapManagerVoidstone.java b/src/main/java/team/chisel/client/render/SubmapManagerVoidstone.java index dc6d493e..84669a3e 100644 --- a/src/main/java/team/chisel/client/render/SubmapManagerVoidstone.java +++ b/src/main/java/team/chisel/client/render/SubmapManagerVoidstone.java @@ -79,7 +79,13 @@ public class SubmapManagerVoidstone extends SubmapManagerBase { } @SideOnly(Side.CLIENT) - private RenderBlocksVoidstone rb; + private static ThreadLocal renderBlocksThreadLocal; + + private static void initStatics() { + if (renderBlocksThreadLocal == null) { + renderBlocksThreadLocal = new ThreadLocal<>(); + } + } private ISubmapManager overlay; private TextureSubmap base; @@ -123,8 +129,11 @@ public class SubmapManagerVoidstone extends SubmapManagerBase { @Override @SideOnly(Side.CLIENT) public RenderBlocks createRenderContext(RenderBlocks rendererOld, Block block, IBlockAccess world) { + initStatics(); + RenderBlocksVoidstone rb = renderBlocksThreadLocal.get(); if (rb == null) { rb = new RenderBlocksVoidstone(); + renderBlocksThreadLocal.set(rb); } RenderBlocks ctx = overlay.createRenderContext(rendererOld, block, world); rb.setRenderBoundsFromBlock(block);