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); }