TiledBlitRenderState.java
net.minecraft.client.renderer.state.gui.TiledBlitRenderState
信息
- 全限定名:net.minecraft.client.renderer.state.gui.TiledBlitRenderState
- 类型:public record
- 包:net.minecraft.client.renderer.state.gui
- 源码路径:src/main/java/net/minecraft/client/renderer/state/gui/TiledBlitRenderState.java
- 起始行号:L14
- 实现:GuiElementRenderState
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
public TiledBlitRenderState(RenderPipeline pipeline, TextureSetup textureSetup, Matrix3x2f pose, int tileWidth, int tileHeight, int x0, int y0, int x1, int y1, float u0, float u1, float v0, float v1, int color, ScreenRectangle scissorArea) @ L32
- 构造器名:TiledBlitRenderState
- 源码定位:L32
- 修饰符:public
参数:
- pipeline: RenderPipeline
- textureSetup: TextureSetup
- pose: Matrix3x2f
- tileWidth: int
- tileHeight: int
- x0: int
- y0: int
- x1: int
- y1: int
- u0: float
- u1: float
- v0: float
- v1: float
- color: int
- scissorArea: ScreenRectangle
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void buildVertices(VertexConsumer vertexConsumer) @ L69
- 方法名:buildVertices
- 源码定位:L69
- 返回类型:void
- 修饰符:public
参数:
- vertexConsumer: VertexConsumer
说明:
TODO
private static ScreenRectangle getBounds(int x0, int y0, int x1, int y1, Matrix3x2f pose, ScreenRectangle scissorArea) @ L110
- 方法名:getBounds
- 源码定位:L110
- 返回类型:ScreenRectangle
- 修饰符:private static
参数:
- x0: int
- y0: int
- x1: int
- y1: int
- pose: Matrix3x2f
- scissorArea: ScreenRectangle
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public record TiledBlitRenderState(
RenderPipeline pipeline,
TextureSetup textureSetup,
Matrix3x2f pose,
int tileWidth,
int tileHeight,
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 TiledBlitRenderState(
RenderPipeline pipeline,
TextureSetup textureSetup,
Matrix3x2f pose,
int tileWidth,
int tileHeight,
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,
tileWidth,
tileHeight,
x0,
y0,
x1,
y1,
u0,
u1,
v0,
v1,
color,
scissorArea,
getBounds(x0, y0, x1, y1, pose, scissorArea)
);
}
@Override
public void buildVertices(VertexConsumer vertexConsumer) {
int width = this.x1() - this.x0();
int height = this.y1() - this.y0();
for (int tileX = 0; tileX < width; tileX += this.tileWidth()) {
int remainingWidth = width - tileX;
int tileWidth;
float u1;
if (this.tileWidth() <= remainingWidth) {
tileWidth = this.tileWidth();
u1 = this.u1();
} else {
tileWidth = remainingWidth;
u1 = Mth.lerp((float)remainingWidth / this.tileWidth(), this.u0(), this.u1());
}
for (int tileY = 0; tileY < height; tileY += this.tileHeight()) {
int remainingHeight = height - tileY;
int tileHeight;
float v1;
if (this.tileHeight() <= remainingHeight) {
tileHeight = this.tileHeight();
v1 = this.v1();
} else {
tileHeight = remainingHeight;
v1 = Mth.lerp((float)remainingHeight / this.tileHeight(), this.v0(), this.v1());
}
int x0 = this.x0() + tileX;
int x1 = this.x0() + tileX + tileWidth;
int y0 = this.y0() + tileY;
int y1 = this.y0() + tileY + tileHeight;
vertexConsumer.addVertexWith2DPose(this.pose(), x0, y0).setUv(this.u0(), this.v0()).setColor(this.color());
vertexConsumer.addVertexWith2DPose(this.pose(), x0, y1).setUv(this.u0(), v1).setColor(this.color());
vertexConsumer.addVertexWith2DPose(this.pose(), x1, y1).setUv(u1, v1).setColor(this.color());
vertexConsumer.addVertexWith2DPose(this.pose(), x1, y0).setUv(u1, this.v0()).setColor(this.color());
}
}
}
private static @Nullable ScreenRectangle getBounds(int x0, int y0, int x1, int y1, Matrix3x2f pose, @Nullable ScreenRectangle scissorArea) {
ScreenRectangle bounds = new ScreenRectangle(x0, y0, x1 - x0, y1 - y0).transformMaxBounds(pose);
return scissorArea != null ? scissorArea.intersection(bounds) : bounds;
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
ScreenRectangle()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.lerp()
- 引用位置: