Merge remote-tracking branch 'origin/1.19.2' into 1.19.4

This commit is contained in:
embeddedt 2023-05-06 16:07:10 -04:00
commit 422b6d56f7
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
4 changed files with 92 additions and 2 deletions

View File

@ -5,6 +5,12 @@ A performance mod for modern Minecraft that significantly improves launch times,
Some fixes are based on prior work in various Forge PRs (check commit history and/or code comments). The config system
is directly derived from Sodium and used under the terms of the LGPL-3.0 license.
## Development builds (generally stable, but may occasionally have bugs)
- 1.16.5, both modloaders: https://nightly.link/embeddedt/ModernFix/workflows/gradle/main/Package.zip
- 1.18.2, both modloaders: https://nightly.link/embeddedt/ModernFix/workflows/gradle/1.18/Package.zip
- 1.19.2, both modloaders: https://nightly.link/embeddedt/ModernFix/workflows/gradle/1.19.2/Package.zip
- 1.19.4, both modloaders: https://nightly.link/embeddedt/ModernFix/workflows/gradle/1.19.4/Package.zip
------------
![YourKit logo](https://www.yourkit.com/images/yklogo.png)

View File

@ -31,7 +31,12 @@ public class ModernFix {
static {
if(ModernFixMixinPlugin.instance.isOptionEnabled("perf.dedicated_reload_executor.ReloadExecutor")) {
resourceReloadService = Util.makeExecutor("ResourceReload");
try {
resourceReloadService = Util.makeExecutor("ResourceReload");
} catch(Throwable e) {
LOGGER.error("Error creating resource reload service, using fallback", e);
resourceReloadService = Util.backgroundExecutor();
}
} else {
resourceReloadService = Util.backgroundExecutor();
}

View File

@ -0,0 +1,80 @@
package org.embeddedt.modernfix.common.mixin.perf.faster_item_rendering;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.color.item.ItemColors;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ItemTransform;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.SimpleBakedModel;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.List;
@Mixin(ItemRenderer.class)
public abstract class ItemRendererMixin {
@Shadow @Final private ItemColors itemColors;
private final RandomSource dummyRandom = RandomSource.createNewThreadLocalInstance();
private static final float[] COLOR_MULTIPLIER = new float[]{1.0F, 1.0F, 1.0F, 1.0F};
private ItemTransforms.TransformType transformType;
@Inject(method = "render", at = @At("HEAD"))
private void markRenderingType(ItemStack itemStack, ItemTransforms.TransformType transformType, boolean leftHand, PoseStack matrixStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay, BakedModel model, CallbackInfo ci) {
this.transformType = transformType;
}
/**
* If a model
* - is a vanilla item model (SimpleBakedModel),
* - has no custom GUI transforms, and
* - is being rendered in 2D on a GUI
* we do not need to go through the process of rendering every quad. Just render the south ones (the ones facing the
* camera).
*/
@Inject(method = "renderModelLists", at = @At("HEAD"), cancellable = true)
private void fasterItemRender(BakedModel model, ItemStack stack, int combinedLight, int combinedOverlay, PoseStack matrixStack, VertexConsumer buffer, CallbackInfo ci) {
if(!stack.isEmpty() && model.getClass() == SimpleBakedModel.class && transformType == ItemTransforms.TransformType.GUI && model.getTransforms().gui == ItemTransform.NO_TRANSFORM) {
ci.cancel();
PoseStack.Pose pose = matrixStack.last();
int[] combinedLights = new int[] {combinedLight, combinedLight, combinedLight, combinedLight};
List<BakedQuad> culledFaces = model.getQuads(null, Direction.SOUTH, dummyRandom);
List<BakedQuad> unculledFaces = model.getQuads(null, null, dummyRandom);
/* check size to avoid instantiating iterator when the list is empty */
if(culledFaces.size() > 0) {
for(BakedQuad quad : culledFaces) {
render2dItemFace(quad, stack, buffer, pose, combinedLights, combinedOverlay);
}
}
for(BakedQuad quad : unculledFaces) {
if(quad.getDirection() == Direction.SOUTH)
render2dItemFace(quad, stack, buffer, pose, combinedLights, combinedOverlay);
}
}
}
private void render2dItemFace(BakedQuad quad, ItemStack stack, VertexConsumer buffer, PoseStack.Pose pose, int[] combinedLights, int combinedOverlay) {
int i = -1;
if (quad.isTinted()) {
i = this.itemColors.getColor(stack, quad.getTintIndex());
}
float f = (float)(i >> 16 & 255) / 255.0F;
float f1 = (float)(i >> 8 & 255) / 255.0F;
float f2 = (float)(i & 255) / 255.0F;
buffer.putBulkData(pose, quad, COLOR_MULTIPLIER, f, f1, f2, combinedLights, combinedOverlay, true);
}
}

View File

@ -20,7 +20,6 @@ public abstract class BlockStateBaseMixin implements IBlockState {
private volatile boolean cacheInvalid = false;
private static boolean buildingCache = false;
private static final ThreadLocal<Boolean> isMakingCache = ThreadLocal.withInitial(() -> false);
@Override
public void clearCache() {
cacheInvalid = true;