Skip to content

Commit aa7f9e5

Browse files
committed
Provide a GuiGraphics to the render events
1 parent e0f1956 commit aa7f9e5

File tree

2 files changed

+74
-2
lines changed
  • minecraft/versions/1.21.8-neoforge/src/main/java/org/polyfrost/oneconfig/internal/mixin/events
  • modules/ui/src/main/java/org/polyfrost/oneconfig/api/ui/v1

2 files changed

+74
-2
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package org.polyfrost.oneconfig.internal.mixin.events;
2+
3+
import com.llamalad7.mixinextras.sugar.Local;
4+
import dev.deftu.omnicore.api.client.render.OmniRenderTicks;
5+
import dev.deftu.omnicore.api.client.render.OmniRenderingContext;
6+
import net.minecraft.client.DeltaTracker;
7+
import net.minecraft.client.gui.GuiGraphics;
8+
import net.minecraft.client.renderer.GameRenderer;
9+
import org.objectweb.asm.Opcodes;
10+
import org.polyfrost.oneconfig.api.event.v1.EventManager;
11+
import org.polyfrost.oneconfig.api.event.v1.events.RenderEvent;
12+
import org.spongepowered.asm.mixin.Mixin;
13+
import org.spongepowered.asm.mixin.Unique;
14+
import org.spongepowered.asm.mixin.injection.At;
15+
import org.spongepowered.asm.mixin.injection.Inject;
16+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
17+
18+
@Mixin(GameRenderer.class)
19+
public class Mixin_RenderEvent {
20+
@Unique private GuiGraphics oneconfig$lastGraphics;
21+
22+
@Inject(
23+
method = "render",
24+
at = @At(
25+
value = "FIELD",
26+
target = "Lnet/minecraft/client/Minecraft;level:Lnet/minecraft/client/multiplayer/ClientLevel;",
27+
opcode = Opcodes.GETFIELD,
28+
ordinal = 3,
29+
shift = At.Shift.BEFORE
30+
)
31+
)
32+
private void renderTickStartCallback(
33+
DeltaTracker arg,
34+
boolean bl,
35+
CallbackInfo ci,
36+
@Local GuiGraphics guigraphics
37+
) {
38+
this.oneconfig$lastGraphics = guigraphics;
39+
40+
RenderEvent e = RenderEvent.Pre.INSTANCE;
41+
e.deltaTicks = OmniRenderTicks.get();
42+
e.ctx = OmniRenderingContext.from(guigraphics);
43+
EventManager.INSTANCE.post(e);
44+
}
45+
46+
@Inject(
47+
method = "render",
48+
at = @At(
49+
value = "INVOKE",
50+
target = "Lnet/minecraft/client/gui/render/GuiRenderer;render(Lcom/mojang/blaze3d/buffers/GpuBufferSlice;)V",
51+
shift = At.Shift.AFTER
52+
)
53+
)
54+
private void renderTickEndCallback(
55+
DeltaTracker arg,
56+
boolean bl,
57+
CallbackInfo ci
58+
) {
59+
GuiGraphics guigraphics = this.oneconfig$lastGraphics;
60+
if (guigraphics == null) {
61+
return;
62+
}
63+
64+
RenderEvent e = RenderEvent.Post.INSTANCE;
65+
e.deltaTicks = OmniRenderTicks.get();
66+
e.ctx = OmniRenderingContext.from(guigraphics);
67+
EventManager.INSTANCE.post(e);
68+
69+
this.oneconfig$lastGraphics = null;
70+
}
71+
}

modules/ui/src/main/java/org/polyfrost/oneconfig/api/ui/v1/UIManager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ default PolyUI createDefault() {
131131
framebuffer.clearColor(0f, 0f, 0f, 0f); // Clear to transparent black
132132
framebuffer.clearDepthStencil(1.0, 0);
133133
framebuffer.usingToRender((matrixStack, w, h) -> {
134-
ctx.getPose().runReplacingGlobalState(() -> {
134+
ctx.pose().runReplacingGlobalState(() -> {
135135
polyUI.render();
136136
Platform.screen().renderLegacyHuds(ctx);
137137
});
@@ -145,9 +145,10 @@ default PolyUI createDefault() {
145145
float scaledWidth = master.getWidth() * scalingFactor * ratio;
146146
float scaledHeight = master.getHeight() * scalingFactor * ratio;
147147
ImmediateScreenRenderer.render(ctx, () -> {
148+
System.out.println("Drawing framebuffer texture at " + scaledWidth + "x" + scaledHeight);
148149
framebuffer.drawColorTexture(
149150
getRenderPipeline(),
150-
ctx.getPose(),
151+
ctx.pose(),
151152
0, 0,
152153
scaledWidth, scaledHeight,
153154
OmniColors.WHITE

0 commit comments

Comments
 (0)