Skip to content

Commit

Permalink
Improve FPS in JEI by culling quads of BakedSimpleItem when in the GUI (
Browse files Browse the repository at this point in the history
#3182)

* Improve FPS in JEI by culling quads of BakedSimpleItem when in the GUI

* Add braces
  • Loading branch information
mezz authored and bonii-xx committed Oct 1, 2017
1 parent 05ce2b1 commit 2938cad
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 15 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Expand Up @@ -44,4 +44,5 @@ options.txt
/resources_old
/resources/assets/tinker
/resources/assets/unused
/design
/design
/classes/
Expand Up @@ -5,30 +5,77 @@

import java.util.List;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.vecmath.Matrix4f;

import slimeknights.mantle.client.model.BakedSimple;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.block.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.model.ItemLayerModel;
import net.minecraftforge.client.model.PerspectiveMapWrapper;
import net.minecraftforge.common.model.TRSRTransformation;
import org.apache.commons.lang3.tuple.Pair;

public class BakedSimpleItem extends BakedSimple {
/**
* Based on {@link ItemLayerModel.BakedItemModel}
* Implements culling for items in the GUI
*/
public class BakedSimpleItem implements IBakedModel {
private final ImmutableList<BakedQuad> quads;
private final TextureAtlasSprite particle;
private final ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> transforms;
private final IBakedModel otherModel;
private final boolean isCulled;
private final ItemOverrideList overrides;

public BakedSimpleItem(ImmutableList<net.minecraft.client.renderer.block.model.BakedQuad> quads, ImmutableMap<net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType, net.minecraftforge.common.model.TRSRTransformation> transforms, net.minecraft.client.renderer.block.model.IBakedModel base) {
super(quads, transforms, base);
public BakedSimpleItem(ImmutableList<BakedQuad> quads, ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> transforms, IBakedModel original) {
this(quads, original.getParticleTexture(), transforms, original.getOverrides(), null);
}

public BakedSimpleItem(List<net.minecraft.client.renderer.block.model.BakedQuad> quads, ImmutableMap<net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType, net.minecraftforge.common.model.TRSRTransformation> transforms, net.minecraft.client.renderer.block.model.IBakedModel base) {
super(quads, transforms, base);
private BakedSimpleItem(ImmutableList<BakedQuad> quads, TextureAtlasSprite particle, ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> transforms, ItemOverrideList overrides, @Nullable IBakedModel unculledModel) {
this.quads = quads;
this.particle = particle;
this.transforms = transforms;
this.overrides = overrides;
if(unculledModel != null) {
this.otherModel = unculledModel;
this.isCulled = true;
} else {
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
for(BakedQuad quad : quads) {
if(quad.getFace() == EnumFacing.SOUTH) {
builder.add(quad);
}
}
this.otherModel = new BakedSimpleItem(builder.build(), particle, transforms, overrides, this);
isCulled = false;
}
}

public BakedSimpleItem(List<net.minecraft.client.renderer.block.model.BakedQuad> quads, ImmutableMap<net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType, net.minecraftforge.common.model.TRSRTransformation> transforms, net.minecraft.client.renderer.texture.TextureAtlasSprite particle, boolean ambientOcclusion, boolean isGui3d, net.minecraft.client.renderer.block.model.ItemOverrideList overrides) {
super(quads, transforms, particle, ambientOcclusion, isGui3d, overrides);
public boolean isAmbientOcclusion() { return true; }
public boolean isGui3d() { return false; }
public boolean isBuiltInRenderer() { return false; }
public TextureAtlasSprite getParticleTexture() { return particle; }
public ItemOverrideList getOverrides() { return overrides; }
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
if(side == null) {
return quads;
}
return ImmutableList.of();
}

@Nonnull
@Override
public List<net.minecraft.client.renderer.block.model.BakedQuad> getQuads(net.minecraft.block.state.IBlockState state, net.minecraft.util.EnumFacing side, long rand) {
if(side == null) {
return super.getQuads(state, null, rand);
public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType type) {
Pair<? extends IBakedModel, Matrix4f> pair = PerspectiveMapWrapper.handlePerspective(this, transforms, type);
if(type == ItemCameraTransforms.TransformType.GUI && !isCulled && pair.getRight() == null) {
return Pair.of(otherModel, null);
} else if(type != ItemCameraTransforms.TransformType.GUI && isCulled) {
return Pair.of(otherModel, pair.getRight());
}
return ImmutableList.of();
return pair;
}
}

0 comments on commit 2938cad

Please sign in to comment.