diff --git a/src/main/java/mod/chiselsandbits/config/ModConfig.java b/src/main/java/mod/chiselsandbits/config/ModConfig.java index 2891e8e5..729fc523 100644 --- a/src/main/java/mod/chiselsandbits/config/ModConfig.java +++ b/src/main/java/mod/chiselsandbits/config/ModConfig.java @@ -192,9 +192,6 @@ public class ModConfig extends Configuration @Configured( category = "Client Performance Settings" ) public boolean dynamicRenderFullChunksOnly; - @Configured( category = "Client Performance Settings" ) - public boolean enableModelCompression; - @Configured( category = "Balance Settings" ) public boolean blacklistTickingBlocks; @@ -382,7 +379,6 @@ private void setDefaults() dynamicRenderFullChunksOnly = true; useVBO = UseVBO.AUTOMATIC; disableCustomVertexFormats = false; - enableModelCompression = true; enableFaceLightmapExtraction = true; useGetLightValue = true; diff --git a/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiseledBlockBaked.java b/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiseledBlockBaked.java index 0b1dd1e3..8665bca8 100644 --- a/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiseledBlockBaked.java +++ b/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiseledBlockBaked.java @@ -234,13 +234,10 @@ IFaceBuilder getBuilder( { if ( ChiseledBlockSmartModel.ForgePipelineDisabled() ) { - if ( ChiselsAndBits.getConfig().enableModelCompression ) - return new ChiselsAndBitsBakedQuad.Builder( DefaultVertexFormats.ITEM, true ); - else - return new UnpackedQuadBuilderWrapper( DefaultVertexFormats.ITEM ); + format = DefaultVertexFormats.ITEM; } - return new ChiselsAndBitsBakedQuad.Builder( format, ChiselsAndBits.getConfig().enableModelCompression ); + return new ChiselsAndBitsBakedQuad.Builder( format ); } private void generateFaces( diff --git a/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiselsAndBitsBakedQuad.java b/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiselsAndBitsBakedQuad.java index 19bb4966..2eccfc91 100644 --- a/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiselsAndBitsBakedQuad.java +++ b/src/main/java/mod/chiselsandbits/render/chiseledblock/ChiselsAndBitsBakedQuad.java @@ -1,6 +1,8 @@ package mod.chiselsandbits.render.chiseledblock; -import mod.chiselsandbits.render.cache.InMemoryQuadCompressor; +import java.util.concurrent.ConcurrentHashMap; + +import mod.chiselsandbits.render.cache.FormatInfo; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; @@ -13,8 +15,7 @@ public class ChiselsAndBitsBakedQuad extends BakedQuad { - private static InMemoryQuadCompressor inMemoryCompressor = new InMemoryQuadCompressor(); - + public static final ConcurrentHashMap formatData = new ConcurrentHashMap(); public static final VertexFormat VERTEX_FORMAT = new VertexFormat(); static @@ -28,7 +29,20 @@ public class ChiselsAndBitsBakedQuad extends BakedQuad VERTEX_FORMAT.addElement( DefaultVertexFormats.TEX_2S ); } - protected final float[][][] rawVertData; + private static int[] packData( + VertexFormat format, + float[][][] unpackedData ) + { + FormatInfo fi = formatData.get( format ); + + if ( fi == null ) + { + fi = new FormatInfo( format ); + formatData.put( format, fi ); + } + + return fi.pack( unpackedData ); + } @Override public void pipe( @@ -46,7 +60,7 @@ public void pipe( { if ( eMap[e] != format.getElementCount() ) { - consumer.put( e, rawVertData[v][eMap[e]] ); + consumer.put( e, getRawPart( v, eMap[e] ) ); } else { @@ -56,8 +70,15 @@ public void pipe( } } + private float[] getRawPart( + int v, + int i ) + { + return formatData.get( this.format ).unpack( vertexData, v, i ); + } + @Override - public int[] getVertexData() // anyone asking this will expect ITEM. + public int[] getVertexData() { final int[] tmpData = new int[format.getNextOffset() /* / 4 * 4 */]; @@ -65,25 +86,21 @@ public int[] getVertexData() // anyone asking this will expect ITEM. { for ( int e = 0; e < format.getElementCount(); e++ ) { - LightUtil.pack( rawVertData[v][e], tmpData, format, v, e ); + LightUtil.pack( getRawPart( v, e ), tmpData, format, v, e ); } } return tmpData; } - static int[] OPTIFINE_WORKAROUND = new int[1]; - public ChiselsAndBitsBakedQuad( final float[][][] unpackedData, final int tint, final EnumFacing orientation, final TextureAtlasSprite sprite, - VertexFormat format, - boolean enableModelCompression ) + VertexFormat format ) { - super( OPTIFINE_WORKAROUND, tint, orientation, sprite, true, format ); - rawVertData = enableModelCompression ? inMemoryCompressor.compress( unpackedData ) : unpackedData; + super( packData( format, unpackedData ), tint, orientation, sprite, true, format ); } public static class Colored extends ChiselsAndBitsBakedQuad @@ -93,10 +110,9 @@ public Colored( final int tint, final EnumFacing orientation, final TextureAtlasSprite sprite, - VertexFormat format, - boolean enableModelCompression ) + VertexFormat format ) { - super( unpackedData, tint, orientation, sprite, format, enableModelCompression ); + super( unpackedData, tint, orientation, sprite, format ); } } @@ -111,14 +127,11 @@ public static class Builder implements IVertexConsumer, IFaceBuilder private int elements = 0; private final VertexFormat format; - private final boolean enableModelCompression; public Builder( - VertexFormat format, - boolean enableModelCompression ) + VertexFormat format ) { this.format = format; - this.enableModelCompression = enableModelCompression; } @Override @@ -189,10 +202,10 @@ public BakedQuad create( { if ( isColored ) { - return new Colored( unpackedData, tint, orientation, sprite, getFormat(), enableModelCompression ); + return new Colored( unpackedData, tint, orientation, sprite, getFormat() ); } - return new ChiselsAndBitsBakedQuad( unpackedData, tint, orientation, sprite, getFormat(), enableModelCompression ); + return new ChiselsAndBitsBakedQuad( unpackedData, tint, orientation, sprite, getFormat() ); } @Override