public unsafe void PushData(CommandBufferPool cbp, CommandBufferScoped?cbs, Action endRenderPass, BufferHolder dst, int dstOffset, ReadOnlySpan <byte> data) { bool isRender = cbs != null; CommandBufferScoped scoped = cbs ?? cbp.Rent(); // Must push all data to the buffer. If it can't fit, split it up. endRenderPass?.Invoke(); while (data.Length > 0) { if (_freeSize < data.Length) { FreeCompleted(); } while (_freeSize == 0) { if (!WaitFreeCompleted(cbp)) { if (isRender) { _gd.FlushAllCommands(); scoped = cbp.Rent(); isRender = false; } else { scoped = cbp.ReturnAndRent(scoped); } } } int chunkSize = Math.Min(_freeSize, data.Length); PushDataImpl(scoped, dst, dstOffset, data.Slice(0, chunkSize)); dstOffset += chunkSize; data = data.Slice(chunkSize); } if (!isRender) { scoped.Dispose(); } }