package speiger.src.coreengine.rendering.models.loader; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.List; import com.google.gson.JsonObject; import speiger.src.collections.objects.lists.ObjectArrayList; import speiger.src.collections.objects.maps.interfaces.Object2ObjectMap; import speiger.src.coreengine.utils.helpers.JsonUtil; public class VertexLoader { public static List loadVertexFormat(JsonObject obj) { List list = new ObjectArrayList<>(); JsonUtil.iterate(obj.get("dataOrder"), T -> list.add(new VertexEntry(T))); return list; } public static ByteBuffer parseVertexData(JsonObject obj, int vertexCount, List entries, boolean excludeOptional) { List numbers = parseVertexData(obj, entries, excludeOptional); ByteBuffer buffer = ByteBuffer.allocate(vertexCount * VertexEntry.caculateByteSize(entries, excludeOptional)).order(ByteOrder.nativeOrder()); for(int i = 0,offset=0,m=vertexCount*entries.size();i parseVertexData(JsonObject obj, List entries, boolean excludeOptional) { int stride = VertexEntry.caclulateStride(entries); int outStride = excludeOptional ? VertexEntry.calculateNonOptionalStride(entries) : stride; int[] vertexes = JsonUtil.parseIntArray(obj.getAsJsonArray("vertexes")); Number[] data = new Number[excludeOptional ? (vertexes.length / stride) * outStride : vertexes.length]; for(int i = 0,inOff=0,outOff=0,m=entries.size();i> parseMappedVertexData(JsonObject obj, List entries, boolean excludeOptional) { Object2ObjectMap> mappedData = Object2ObjectMap.builder().linkedMap(); int stride = VertexEntry.caclulateStride(entries); int[] vertexes = JsonUtil.parseIntArray(obj.getAsJsonArray("vertexes")); for(int i = 0,offset=0,m=entries.size();i void deserializeIndecies(int[] indecies, T[] in, int size, int stride, int offset, T[] out, int outStride, int outOffset) { for(int i = 0,m=(indecies.length/stride)*size;i List deserializeIndecies(int[] indecies, T[] in, int size, int stride, int offset) { List out = new ObjectArrayList<>(); for(int i = 0,m=(indecies.length/stride)*size;i