diff --git a/src/main/java/speiger/src/coreengine/rendering/models/DataType.java b/src/main/java/speiger/src/coreengine/rendering/models/DataType.java index 551741f..7053e6e 100644 --- a/src/main/java/speiger/src/coreengine/rendering/models/DataType.java +++ b/src/main/java/speiger/src/coreengine/rendering/models/DataType.java @@ -1,5 +1,7 @@ package speiger.src.coreengine.rendering.models; +import java.nio.ByteBuffer; +import java.util.List; import java.util.Map; import speiger.src.collections.objects.maps.impl.hash.Object2ObjectOpenHashMap; @@ -38,6 +40,36 @@ public enum DataType return this == FLOAT || this == DOUBLE; } + public void putIntoBuffer(ByteBuffer buffer, List data, int offset, int size) + { + for(int i = 0;i array, boolean excludeOptional) + { + return excludeOptional ? calculateNonOptionalStride(array) : caclulateStride(array); + } + + public static int calculateNonOptionalStride(List array) + { + int size = 0; + for(int i = 0,m=array.size();i array) + { + int size = 0; + for(int i = 0,m=array.size();i 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.calculateStride(entries, excludeOptional)); + 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.createLinkedMap(); + 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