minecraft-src/net/minecraft/client/gui/render/state/BlitRenderState.java
2025-09-18 12:27:44 +00:00

60 lines
2 KiB
Java

package net.minecraft.client.gui.render.state;
import com.mojang.blaze3d.pipeline.RenderPipeline;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.navigation.ScreenRectangle;
import net.minecraft.client.gui.render.TextureSetup;
import org.jetbrains.annotations.Nullable;
import org.joml.Matrix3x2f;
@Environment(EnvType.CLIENT)
public record BlitRenderState(
RenderPipeline pipeline,
TextureSetup textureSetup,
Matrix3x2f pose,
int x0,
int y0,
int x1,
int y1,
float u0,
float u1,
float v0,
float v1,
int color,
@Nullable ScreenRectangle scissorArea,
@Nullable ScreenRectangle bounds
) implements GuiElementRenderState {
public BlitRenderState(
RenderPipeline pipeline,
TextureSetup textureSetup,
Matrix3x2f pose,
int x0,
int y0,
int x1,
int y1,
float u0,
float u1,
float v0,
float v1,
int color,
@Nullable ScreenRectangle scissorArea
) {
this(pipeline, textureSetup, pose, x0, y0, x1, y1, u0, u1, v0, v1, color, scissorArea, getBounds(x0, y0, x1, y1, pose, scissorArea));
}
@Override
public void buildVertices(VertexConsumer consumer, float z) {
consumer.addVertexWith2DPose(this.pose(), this.x0(), this.y0(), z).setUv(this.u0(), this.v0()).setColor(this.color());
consumer.addVertexWith2DPose(this.pose(), this.x0(), this.y1(), z).setUv(this.u0(), this.v1()).setColor(this.color());
consumer.addVertexWith2DPose(this.pose(), this.x1(), this.y1(), z).setUv(this.u1(), this.v1()).setColor(this.color());
consumer.addVertexWith2DPose(this.pose(), this.x1(), this.y0(), z).setUv(this.u1(), this.v0()).setColor(this.color());
}
@Nullable
private static ScreenRectangle getBounds(int x0, int y0, int x1, int y1, Matrix3x2f pose, @Nullable ScreenRectangle scissorArea) {
ScreenRectangle screenRectangle = new ScreenRectangle(x0, y0, x1 - x0, y1 - y0).transformMaxBounds(pose);
return scissorArea != null ? scissorArea.intersection(screenRectangle) : screenRectangle;
}
}