SimpleJavaEngine/src/main/java/speiger/src/coreengine/rendering/utils/values/GLDataType.java

72 lines
4.3 KiB
Java

package speiger.src.coreengine.rendering.utils.values;
import java.util.Map;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import org.lwjgl.opengl.GL30;
import speiger.src.collections.ints.maps.impl.hash.Int2ObjectOpenHashMap;
import speiger.src.collections.ints.maps.interfaces.Int2ObjectMap;
import speiger.src.collections.objects.maps.impl.hash.Object2ObjectOpenHashMap;
import speiger.src.coreengine.rendering.utils.values.IGLValue.IGLDataType;
public record GLDataType(String name, int glValue, int byteSize, GLDataType.DataType type, boolean supportsIBO, boolean isCompound) implements IGLDataType {
static final Int2ObjectMap<GLDataType> ID_TO_TYPE = new Int2ObjectOpenHashMap<>();
static final Map<String, GLDataType> NAME_TO_TYPE = new Object2ObjectOpenHashMap<>();
//Basic Types
public static final GLDataType BYTE = new GLDataType("byte", GL11.GL_BYTE, 1, DataType.BYTE);
public static final GLDataType UNSIGNED_BYTE = new GLDataType("u_byte", GL11.GL_UNSIGNED_BYTE, 1, DataType.BYTE, true, false);
public static final GLDataType SHORT = new GLDataType("short", GL11.GL_SHORT, 2, DataType.SHORT);
public static final GLDataType UNSIGNED_SHORT = new GLDataType("u_short", GL11.GL_UNSIGNED_SHORT, 2, DataType.SHORT, true, false);
public static final GLDataType INT = new GLDataType("int", GL11.GL_INT, 4, DataType.INT);
public static final GLDataType UNSIGNED_INT = new GLDataType("u_int", GL11.GL_UNSIGNED_INT, 4, DataType.INT, true, false);
public static final GLDataType FLOAT = new GLDataType("float", GL11.GL_FLOAT, 4, DataType.FLOAT);
public static final GLDataType DOUBLE = new GLDataType("double", GL11.GL_DOUBLE, 8, DataType.DOUBLE);
//CompressedTypes
public static final GLDataType UNSIGNED_3_3_2 = new GLDataType("u_byte_3_3_2", GL12.GL_UNSIGNED_BYTE_3_3_2, 1, DataType.BYTE);
public static final GLDataType UNSIGNED_2_3_3_REV = new GLDataType("u_byte_2_3_3_rev", GL12.GL_UNSIGNED_BYTE_2_3_3_REV, 1, DataType.BYTE);
public static final GLDataType UNSIGNED_5_6_5 = new GLDataType("u_short_5_6_5", GL12.GL_UNSIGNED_SHORT_5_6_5, 2, DataType.SHORT);
public static final GLDataType UNSIGNED_5_6_5_REV = new GLDataType("u_short_5_6_5_rev", GL12.GL_UNSIGNED_SHORT_5_6_5_REV, 2, DataType.SHORT);
public static final GLDataType UNSIGNED_4_4_4_4 = new GLDataType("u_short_4_4_4_4", GL12.GL_UNSIGNED_SHORT_4_4_4_4, 2, DataType.SHORT);
public static final GLDataType UNSIGNED_4_4_4_4_REV = new GLDataType("u_short_4_4_4_4_rev", GL12.GL_UNSIGNED_SHORT_4_4_4_4_REV, 2, DataType.SHORT);
public static final GLDataType UNSIGNED_5_5_5_1 = new GLDataType("u_short_5_5_5_1", GL12.GL_UNSIGNED_SHORT_5_5_5_1, 2, DataType.SHORT);
public static final GLDataType UNSIGNED_1_5_5_5_REV = new GLDataType("u_short_1_5_5_5_rev", GL12.GL_UNSIGNED_SHORT_1_5_5_5_REV, 2, DataType.SHORT);
public static final GLDataType UNSIGNED_8_8_8_8 = new GLDataType("u_int_8_8_8_8", GL12.GL_UNSIGNED_INT_8_8_8_8, 4, DataType.INT);
public static final GLDataType UNSIGNED_8_8_8_8_REV = new GLDataType("u_int_8_8_8_8_rev", GL12.GL_UNSIGNED_INT_8_8_8_8_REV, 4, DataType.INT);
public static final GLDataType UNSIGNED_10_10_10_2 = new GLDataType("u_int_10_10_10_2", GL12.GL_UNSIGNED_INT_10_10_10_2, 4, DataType.INT);
public static final GLDataType UNSIGNED_2_10_10_10_REV = new GLDataType("u_int_2_10_10_10_rev", GL12.GL_UNSIGNED_INT_2_10_10_10_REV, 4, DataType.INT);
public static final GLDataType UNSIGNED_INT_10F_11F_11F_REV = new GLDataType("u_int_10_11_11_rev", GL30.GL_UNSIGNED_INT_10F_11F_11F_REV, 4, DataType.INT);
public static final GLDataType UNSIGNED_INT_5_9_9_9_REV = new GLDataType("u_int_5_9_9_9_rev", GL30.GL_UNSIGNED_INT_5_9_9_9_REV, 4, DataType.INT);
public GLDataType(String name, int glValue, int byteSize, DataType type, boolean isCompound) {
this(name, glValue, byteSize, type, false, isCompound);
}
public GLDataType(String name, int glValue, int byteSize, DataType type) {
this(name, glValue, byteSize, type, false, false);
}
public GLDataType {
ID_TO_TYPE.put(glValue, this);
NAME_TO_TYPE.put(name, this);
}
public int size(int attributes) { return isCompound ? byteSize : attributes * byteSize; }
public static GLDataType byName(String name) { return NAME_TO_TYPE.get(name); }
public static GLDataType byId(int id) { return ID_TO_TYPE.get(id); }
public static enum DataType {
BYTE,
SHORT,
INT,
LONG,
FLOAT,
DOUBLE;
}
}