public T Get(int primitiveCount) { int index = MathUtils.HighestBitIndex(MathUtils.NextPowerOf2(primitiveCount)); SizedMeshBuffer <T> buffer = buffers[index]; if (buffer == null) { // if we happen to need buffers with higher counts of primitives, make a new one InitBufferPair(index, 1); buffer = buffers[index]; } return(buffer.GetNextFree()); }
public void InitBufferPair(int index, int initialCapacity) { int powerOfTwo = 1 << index; if (buffers[index] != null) { buffers[index].EnsureCapacity(initialCapacity); } else { buffers[index] = new SizedMeshBuffer <T>(powerOfTwo, initialCapacity); } // make sure instances exist for all lower indices as well for (int i = index - 1; i >= 0; --i) { if (buffers[i] == null) { powerOfTwo = 1 << i; buffers[i] = new SizedMeshBuffer <T>(powerOfTwo, 1); } } numBuffers = index + 1; }