Add ClientReloadShadersEvent (#149)

This commit is contained in:
shedaniel
2021-12-20 10:39:17 +08:00
committed by GitHub
parent 83a4ca436e
commit ae4ebbb736
4 changed files with 50 additions and 1 deletions

View File

@@ -19,10 +19,15 @@
package dev.architectury.mixin.fabric.client;
import com.mojang.blaze3d.shaders.Program;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.datafixers.util.Pair;
import dev.architectury.event.events.client.ClientGuiEvent;
import dev.architectury.event.events.client.ClientReloadShadersEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.ShaderInstance;
import net.minecraft.server.packs.resources.ResourceManager;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -31,6 +36,9 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import java.util.List;
import java.util.function.Consumer;
@Mixin(GameRenderer.class)
public abstract class MixinGameRenderer {
@Shadow
@@ -52,4 +60,12 @@ public abstract class MixinGameRenderer {
public void renderScreenPost(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, PoseStack matrices) {
ClientGuiEvent.RENDER_POST.invoker().render(minecraft.screen, matrices, mouseX, mouseY, minecraft.getDeltaFrameTime());
}
@Inject(method = "reloadShaders",
at = @At(value = "INVOKE", target = "Ljava/util/List;add(Ljava/lang/Object;)Z", ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION)
public void reloadShaders(ResourceManager resourceManager, CallbackInfo ci, List<Program> programs, List<Pair<ShaderInstance, Consumer<ShaderInstance>>> shaders) {
ClientReloadShadersEvent.EVENT.invoker().reload(resourceManager, (shader, callback) -> {
shaders.add(Pair.of(shader, callback));
});
}
}