60 lines
2 KiB
Java
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;
|
|
}
|
|
}
|