private bool NonBlockingWait() { // only on the first time ClientWaitSyncFlags waitOption = ClientWaitSyncFlags.SyncFlushCommandsBit; WaitSyncStatus result = GL.ClientWaitSync(ObjectPtr, waitOption, 0); waitOption = ClientWaitSyncFlags.None; if (result == WaitSyncStatus.WaitFailed) { throw new InvalidOperationException("GPU NonBlockingWait sync failed - surplus actions incomplete"); } return(!(result == WaitSyncStatus.ConditionSatisfied || result == WaitSyncStatus.AlreadySignaled)); }
/// <summary> /// Wait for fence /// </summary> /// <param name="flags">Only None or SyncFlushCommandsBit</param> /// <param name="timeout">In nanoseconds!</param> /// <returns>Wait state (AlreadySignalled (pre signalled),Expired (timeout),Satisfied (signalled during timeout), Failed)</returns> public WaitSyncStatus ClientWait(ClientWaitSyncFlags flags, int timeout) { var status = GL.ClientWaitSync(Id, flags, timeout); return(status); }
/// <inheritdoc cref="GLOFC.GL4.GLFenceSync.GLWait"/> public WaitSyncStatus ClientWait(ClientWaitSyncFlags flags, int timeout) { return(Sync.ClientWait(flags, timeout)); }
public void BeginSync() { ObjectPtr = GL.FenceSync(SyncCondition.SyncGpuCommandsComplete, 0); IsSignalled = false; mWaitOption = ClientWaitSyncFlags.SyncFlushCommandsBit; }