public void LockRange(int _lockBeginBytes, int _lockLength)
		{
			var newRange = new BufferRange{ mStartOffset = _lockBeginBytes, mLength = _lockLength };
			IntPtr syncName = GL.FenceSync(SyncCondition.SyncGpuCommandsComplete, 0);
			var newLock = new BufferLock{mRange= newRange, mSyncObj = syncName };

			mBufferLocks.Add(newLock);
		}
		public void WaitForLockedRange(int _lockBeginBytes, int _lockLength)
		{
			var testRange = new BufferRange{mStartOffset = _lockBeginBytes,mLength = _lockLength };
			var swapLocks = new List<BufferLock>();
			foreach (var it in mBufferLocks)
			{
				if (testRange.Overlaps(it.mRange)) {
					wait(it.mSyncObj);
					cleanup(it);
				} else {
					swapLocks.Add(it);
				}
			}

			mBufferLocks = swapLocks;
		}
		public bool Overlaps(BufferRange _rhs) {
			return mStartOffset < (_rhs.mStartOffset + _rhs.mLength)
				&& _rhs.mStartOffset < (mStartOffset + mLength);
		}