diff --git a/spine-unity/Assets/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/spine-unity/Components/SkeletonRenderer.cs index 811cfcb92..1eb23a46d 100644 --- a/spine-unity/Assets/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/spine-unity/Components/SkeletonRenderer.cs @@ -171,6 +171,10 @@ namespace Spine.Unity { if (skeleton != null) skeleton.SetToSetupPose(); } + public void EnsureMeshGeneratorCapacity (int minimumVertexCount) { + meshGenerator.EnsureVertexCapacity(minimumVertexCount); + } + /// /// Initialize this component. Attempts to load the SkeletonData and creates the internal Skeleton object and buffers. /// If set to true, it will overwrite internal objects if they were already generated. Otherwise, the initialized component will ignore subsequent calls to initialize. diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs b/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs index c9b012184..ac4e19469 100644 --- a/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs +++ b/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs @@ -1059,6 +1059,39 @@ namespace Spine.Unity { } #endregion + public void EnsureVertexCapacity (int minimumVertexCount, bool inlcudeTintBlack = false, bool includeTangents = false, bool includeNormals = false) { + if (minimumVertexCount > vertexBuffer.Items.Length) { + Array.Resize(ref vertexBuffer.Items, minimumVertexCount); + Array.Resize(ref uvBuffer.Items, minimumVertexCount); + Array.Resize(ref colorBuffer.Items, minimumVertexCount); + + if (inlcudeTintBlack) { + if (uv2 == null) { + uv2 = new ExposedList(minimumVertexCount); + uv3 = new ExposedList(minimumVertexCount); + } + uv2.Resize(minimumVertexCount); + uv3.Resize(minimumVertexCount); + } + + if (includeNormals) { + if (normals == null) + normals = new Vector3[minimumVertexCount]; + else + Array.Resize(ref normals, minimumVertexCount); + + } + + if (includeTangents) { + if (tangents == null) + tangents = new Vector4[minimumVertexCount]; + else + Array.Resize(ref tangents, minimumVertexCount); + } + } + //vertexBuffer.Count = uvBuffer.Count = colorBuffer.Count = minimumVertexCount; + } + public void TrimExcess () { vertexBuffer.TrimExcess(); uvBuffer.TrimExcess();