From 4424a414114373f6bf693204e0eb1cc955218556 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Mon, 19 May 2014 15:35:45 +0200 Subject: [PATCH] Use short indices. --- spine-xna/src/MeshBatcher.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/spine-xna/src/MeshBatcher.cs b/spine-xna/src/MeshBatcher.cs index c857b1b50..751d19a7a 100644 --- a/spine-xna/src/MeshBatcher.cs +++ b/spine-xna/src/MeshBatcher.cs @@ -80,7 +80,7 @@ namespace Spine { private readonly List items; private readonly Queue freeItems; private VertexPositionColorTexture[] vertexArray = { }; - private int[] triangles = { }; + private short[] triangles = { }; public MeshBatcher () { items = new List(256); @@ -101,7 +101,7 @@ namespace Spine { private void EnsureCapacity (int vertexCount, int triangleCount) { if (vertexArray.Length < vertexCount) vertexArray = new VertexPositionColorTexture[vertexCount]; - if (triangles.Length < triangleCount) triangles = new int[triangleCount]; + if (triangles.Length < triangleCount) triangles = new short[triangleCount]; } public void Draw (GraphicsDevice device) { @@ -121,7 +121,9 @@ namespace Spine { Texture2D lastTexture = null; for (int i = 0; i < itemCount; i++) { MeshItem item = items[i]; - if (item.texture != lastTexture) { + int itemVertexCount = item.vertexCount; + + if (item.texture != lastTexture || vertexCount + itemVertexCount > short.MaxValue) { FlushVertexArray(device, vertexCount, triangleCount); vertexCount = 0; triangleCount = 0; @@ -132,10 +134,9 @@ namespace Spine { int[] itemTriangles = item.triangles; int itemTriangleCount = item.triangleCount; for (int ii = 0, t = triangleCount; ii < itemTriangleCount; ii++, t++) - triangles[t] = itemTriangles[ii] + vertexCount; + triangles[t] = (short)(itemTriangles[ii] + vertexCount); triangleCount += itemTriangleCount; - int itemVertexCount = item.vertexCount; Array.Copy(item.vertices, 0, vertexArray, vertexCount, itemVertexCount); vertexCount += itemVertexCount;