186 lines
6.3 KiB
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;
|
|
}
|
|
}
|
|
}
|