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

186 lines
6.3 KiB
Java

package com.mojang.blaze3d.vertex;
import com.mojang.blaze3d.platform.GlStateManager;
import java.util.function.IntConsumer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class VertexFormatElement {
private static final Logger LOGGER;
private final Type type;
private final Usage usage;
private final int index;
private final int count;
private final int byteSize;
public VertexFormatElement(final int integer1, final Type a, final Usage b, final int integer4) {
if (this.supportsUsage(integer1, b)) {
this.usage = b;
}
else {
VertexFormatElement.LOGGER.warn("Multiple vertex elements of the same type other than UVs are not supported. Forcing type to UV.");
this.usage = Usage.UV;
}
this.type = a;
this.index = integer1;
this.count = integer4;
this.byteSize = a.getSize() * this.count;
}
private boolean supportsUsage(final int integer, final Usage b) {
return integer == 0 || b == Usage.UV;
}
public final Type getType() {
return this.type;
}
public final Usage getUsage() {
return this.usage;
}
public final int getIndex() {
return this.index;
}
@Override
public String toString() {
return this.count + "," + this.usage.getName() + "," + this.type.getName();
}
public final int getByteSize() {
return this.byteSize;
}
@Override
public boolean equals(final Object object) {
if (this == object) {
return true;
}
if (object == null || this.getClass() != object.getClass()) {
return false;
}
final VertexFormatElement dhr3 = (VertexFormatElement)object;
return this.count == dhr3.count && this.index == dhr3.index && this.type == dhr3.type && this.usage == dhr3.usage;
}
@Override
public int hashCode() {
int integer2 = this.type.hashCode();
integer2 = 31 * integer2 + this.usage.hashCode();
integer2 = 31 * integer2 + this.index;
integer2 = 31 * integer2 + this.count;
return integer2;
}
public void setupBufferState(final long long1, final int integer) {
this.usage.setupBufferState(this.count, this.type.getGlType(), integer, long1, this.index);
}
public void clearBufferState() {
this.usage.clearBufferState(this.index);
}
static {
LOGGER = LogManager.getLogger();
}
public enum Usage {
POSITION("Position", (integer1, integer2, integer3, long4, integer5) -> {
GlStateManager._vertexPointer(integer1, integer2, integer3, long4);
GlStateManager._enableClientState(32884);
return;
}, integer -> GlStateManager._disableClientState(32884)),
NORMAL("Normal", (integer1, integer2, integer3, long4, integer5) -> {
GlStateManager._normalPointer(integer2, integer3, long4);
GlStateManager._enableClientState(32885);
return;
}, integer -> GlStateManager._disableClientState(32885)),
COLOR("Vertex Color", (integer1, integer2, integer3, long4, integer5) -> {
GlStateManager._colorPointer(integer1, integer2, integer3, long4);
GlStateManager._enableClientState(32886);
return;
}, integer -> {
GlStateManager._disableClientState(32886);
GlStateManager._clearCurrentColor();
return;
}),
UV("UV", (integer1, integer2, integer3, long4, integer5) -> {
GlStateManager._glClientActiveTexture(33984 + integer5);
GlStateManager._texCoordPointer(integer1, integer2, integer3, long4);
GlStateManager._enableClientState(32888);
GlStateManager._glClientActiveTexture(33984);
return;
}, integer -> {
GlStateManager._glClientActiveTexture(33984 + integer);
GlStateManager._disableClientState(32888);
GlStateManager._glClientActiveTexture(33984);
return;
}),
PADDING("Padding", (integer1, integer2, integer3, long4, integer5) -> {}, integer -> {}),
GENERIC("Generic", (integer1, integer2, integer3, long4, integer5) -> {
GlStateManager._enableVertexAttribArray(integer5);
GlStateManager._vertexAttribPointer(integer5, integer1, integer2, false, integer3, long4);
return;
}, GlStateManager::_disableVertexAttribArray);
private final String name;
private final SetupState setupState;
private final IntConsumer clearState;
private Usage(final String string3, final SetupState a, final IntConsumer intConsumer) {
this.name = string3;
this.setupState = a;
this.clearState = intConsumer;
}
private void setupBufferState(final int integer1, final int integer2, final int integer3, final long long4, final int integer5) {
this.setupState.setupBufferState(integer1, integer2, integer3, long4, integer5);
}
public void clearBufferState(final int integer) {
this.clearState.accept(integer);
}
public String getName() {
return this.name;
}
interface SetupState {
void setupBufferState(final int integer1, final int integer2, final int integer3, final long long4, final int integer5);
}
}
public enum Type {
FLOAT(4, "Float", 5126),
UBYTE(1, "Unsigned Byte", 5121),
BYTE(1, "Byte", 5120),
USHORT(2, "Unsigned Short", 5123),
SHORT(2, "Short", 5122),
UINT(4, "Unsigned Int", 5125),
INT(4, "Int", 5124);
private final int size;
private final String name;
private final int glType;
private Type(final int integer3, final String string4, final int integer5) {
this.size = integer3;
this.name = string4;
this.glType = integer5;
}
public int getSize() {
return this.size;
}
public String getName() {
return this.name;
}
public int getGlType() {
return this.glType;
}
}
}