From 524b26d2a2d958d3641b782dd6edcbff6107007c Mon Sep 17 00:00:00 2001 From: covers1624 Date: Thu, 29 Nov 2018 15:23:43 +1030 Subject: [PATCH] Implement caching for facade item models. --- .../appeng/client/render/FacadeBakedItemModel.java | 11 ++++++++--- .../client/render/FacadeDispatcherBakedModel.java | 14 +++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/appeng/client/render/FacadeBakedItemModel.java b/src/main/java/appeng/client/render/FacadeBakedItemModel.java index fb8d68461..c22f128ea 100644 --- a/src/main/java/appeng/client/render/FacadeBakedItemModel.java +++ b/src/main/java/appeng/client/render/FacadeBakedItemModel.java @@ -45,6 +45,7 @@ public class FacadeBakedItemModel extends DelegateBakedModel private final ItemStack textureStack; private final FacadeBuilder facadeBuilder; + private List quads = null; protected FacadeBakedItemModel( IBakedModel base, ItemStack textureStack, FacadeBuilder facadeBuilder ) { @@ -60,9 +61,13 @@ public class FacadeBakedItemModel extends DelegateBakedModel { return Collections.emptyList(); } - List quads = new ArrayList<>(); - quads.addAll( this.facadeBuilder.buildFacadeItemQuads( this.textureStack, EnumFacing.NORTH ) ); - quads.addAll( this.getBaseModel().getQuads( state, side, rand ) ); + if( quads == null ) + { + quads = new ArrayList<>(); + quads.addAll( this.facadeBuilder.buildFacadeItemQuads( this.textureStack, EnumFacing.NORTH ) ); + quads.addAll( this.getBaseModel().getQuads( state, side, rand ) ); + quads = Collections.unmodifiableList( quads ); + } return quads; } diff --git a/src/main/java/appeng/client/render/FacadeDispatcherBakedModel.java b/src/main/java/appeng/client/render/FacadeDispatcherBakedModel.java index d67fbf535..893e84405 100644 --- a/src/main/java/appeng/client/render/FacadeDispatcherBakedModel.java +++ b/src/main/java/appeng/client/render/FacadeDispatcherBakedModel.java @@ -21,9 +21,12 @@ package appeng.client.render; import java.util.Collections; import java.util.List; +import java.util.Objects; import javax.annotation.Nullable; +import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.IBakedModel; @@ -47,6 +50,7 @@ public class FacadeDispatcherBakedModel extends DelegateBakedModel { private final VertexFormat format; private final FacadeBuilder facadeBuilder; + private final Int2ObjectMap cache = new Int2ObjectArrayMap<>(); public FacadeDispatcherBakedModel( IBakedModel baseModel, VertexFormat format, FacadeBuilder facadeBuilder ) { @@ -91,7 +95,15 @@ public class FacadeDispatcherBakedModel extends DelegateBakedModel ItemStack textureItem = itemFacade.getTextureItem( stack ); - return new FacadeBakedItemModel( FacadeDispatcherBakedModel.this.getBaseModel(), textureItem, FacadeDispatcherBakedModel.this.facadeBuilder ); + int hash = Objects.hash( textureItem.getItem().getRegistryName(), textureItem.getMetadata(), textureItem.getTagCompound() ); + FacadeBakedItemModel model = FacadeDispatcherBakedModel.this.cache.get( hash ); + if( model == null ) + { + model = new FacadeBakedItemModel(FacadeDispatcherBakedModel.this.getBaseModel(), textureItem, FacadeDispatcherBakedModel.this.facadeBuilder); + FacadeDispatcherBakedModel.this.cache.put(hash, model); + } + + return model; } }; }