minecraft-source/src/com/mojang/blaze3d/vertex/BufferVertexConsumer.java

98 lines
3.4 KiB
Java

package com.mojang.blaze3d.vertex;
import net.minecraft.util.Mth;
public interface BufferVertexConsumer extends VertexConsumer {
VertexFormatElement currentElement();
void nextElement();
void putByte(final int integer, final byte byte2);
void putShort(final int integer, final short short2);
void putFloat(final int integer, final float float2);
default VertexConsumer vertex(final double double1, final double double2, final double double3) {
if (this.currentElement().getType() != VertexFormatElement.Type.FLOAT) {
throw new IllegalStateException();
}
this.putFloat(0, (float)double1);
this.putFloat(4, (float)double2);
this.putFloat(8, (float)double3);
this.nextElement();
return this;
}
default VertexConsumer color(final int integer1, final int integer2, final int integer3, final int integer4) {
final VertexFormatElement dhr6 = this.currentElement();
if (dhr6.getUsage() != VertexFormatElement.Usage.COLOR) {
return this;
}
if (dhr6.getType() != VertexFormatElement.Type.UBYTE) {
throw new IllegalStateException();
}
this.putByte(0, (byte)integer1);
this.putByte(1, (byte)integer2);
this.putByte(2, (byte)integer3);
this.putByte(3, (byte)integer4);
this.nextElement();
return this;
}
default VertexConsumer uv(final float float1, final float float2) {
final VertexFormatElement dhr4 = this.currentElement();
if (dhr4.getUsage() != VertexFormatElement.Usage.UV || dhr4.getIndex() != 0) {
return this;
}
if (dhr4.getType() != VertexFormatElement.Type.FLOAT) {
throw new IllegalStateException();
}
this.putFloat(0, float1);
this.putFloat(4, float2);
this.nextElement();
return this;
}
default VertexConsumer overlayCoords(final int integer1, final int integer2) {
return this.uvShort((short)integer1, (short)integer2, 1);
}
default VertexConsumer uv2(final int integer1, final int integer2) {
return this.uvShort((short)integer1, (short)integer2, 2);
}
default VertexConsumer uvShort(final short short1, final short short2, final int integer) {
final VertexFormatElement dhr5 = this.currentElement();
if (dhr5.getUsage() != VertexFormatElement.Usage.UV || dhr5.getIndex() != integer) {
return this;
}
if (dhr5.getType() != VertexFormatElement.Type.SHORT) {
throw new IllegalStateException();
}
this.putShort(0, short1);
this.putShort(2, short2);
this.nextElement();
return this;
}
default VertexConsumer normal(final float float1, final float float2, final float float3) {
final VertexFormatElement dhr5 = this.currentElement();
if (dhr5.getUsage() != VertexFormatElement.Usage.NORMAL) {
return this;
}
if (dhr5.getType() != VertexFormatElement.Type.BYTE) {
throw new IllegalStateException();
}
this.putByte(0, normalIntValue(float1));
this.putByte(1, normalIntValue(float2));
this.putByte(2, normalIntValue(float3));
this.nextElement();
return this;
}
default byte normalIntValue(final float float1) {
return (byte)((int)(Mth.clamp(float1, -1.0f, 1.0f) * 127.0f) & 0xFF);
}
}