[libgdx] Read number of bones for weighted vertices to avoid over allocation.

This commit is contained in:
Nathan Sweet 2026-03-03 18:48:01 -04:00
parent d5535aa279
commit 03fabb37b1

View File

@ -38,8 +38,6 @@ import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.DataInput; import com.badlogic.gdx.utils.DataInput;
import com.badlogic.gdx.utils.FloatArray;
import com.badlogic.gdx.utils.IntArray;
import com.badlogic.gdx.utils.Null; import com.badlogic.gdx.utils.Null;
import com.badlogic.gdx.utils.SerializationException; import com.badlogic.gdx.utils.SerializationException;
@ -730,20 +728,21 @@ public class SkeletonBinary extends SkeletonLoader {
vertices.vertices = readFloatArray(input, vertices.length, scale); vertices.vertices = readFloatArray(input, vertices.length, scale);
return vertices; return vertices;
} }
var weights = new FloatArray(vertices.length * 3 * 3); int n = input.readInt(true);
var bonesArray = new IntArray(vertices.length * 3); var bones = new int[n];
for (int i = 0; i < vertexCount; i++) { var weights = new float[(n - vertexCount) * 3];
for (int b = 0, w = 0; b < n;) {
int boneCount = input.readInt(true); int boneCount = input.readInt(true);
bonesArray.add(boneCount); bones[b++] = boneCount;
for (int ii = 0; ii < boneCount; ii++) { for (int ii = 0; ii < boneCount; ii++, w += 3) {
bonesArray.add(input.readInt(true)); bones[b++] = input.readInt(true);
weights.add(input.readFloat() * scale); weights[w] = input.readFloat() * scale;
weights.add(input.readFloat() * scale); weights[w + 1] = input.readFloat() * scale;
weights.add(input.readFloat()); weights[w + 2] = input.readFloat();
} }
} }
vertices.vertices = weights.toArray(); vertices.vertices = weights;
vertices.bones = bonesArray.toArray(); vertices.bones = bones;
return vertices; return vertices;
} }