private void EnsureArrayCapacity(int numBatchItems)
{
int neededCapacity = 6 * numBatchItems;
if (_index != null && neededCapacity <= _index.Length)
{
// Short circuit out of here because we have enough capacity.
return;
}
short[] newIndex = new short[6 * numBatchItems];
int start = 0;
if (_index != null)
{
_index.CopyTo(newIndex, 0);
start = _index.Length / 6;
}
for (var i = start; i < numBatchItems; i++)
{
/*
* TL TR
* 0----1 0,1,2,3 = index offsets for vertex indices
* | /| TL,TR,BL,BR are vertex references in SpriteBatchItem.
* | / |
* | / |
* |/ |
* 2----3
* BL BR
*/
// Triangle 1
newIndex[i * 6 + 0] = (short)(i * 4);
newIndex[i * 6 + 1] = (short)(i * 4 + 1);
newIndex[i * 6 + 2] = (short)(i * 4 + 2);
// Triangle 2
newIndex[i * 6 + 3] = (short)(i * 4 + 1);
newIndex[i * 6 + 4] = (short)(i * 4 + 3);
newIndex[i * 6 + 5] = (short)(i * 4 + 2);
}
_index = newIndex;
_vertexArray = new VertexPositionColorTexture[4 * numBatchItems];
}