public T GetBufferGenerator <T> () where T : IBufferGenerator { var t = typeof(T); IBufferGenerator result = null; lock (_BufferGenerators) { if (_BufferGenerators.TryGetValue(t, out result)) { return((T)result); } if (_AllowCreatingNewGenerators != 1) { throw new InvalidOperationException("Cannot create a buffer generator after the flush operation has occurred"); } result = (IBufferGenerator)Activator.CreateInstance( t, DeviceManager.Device, CreateResourceLock, _DisposeResource ); _BufferGenerators.Add(t, result); return((T)result); } }
public T GetBufferGenerator <T> () where T : IBufferGenerator { var t = typeof(T); IBufferGenerator result = null; var bg = _BufferGenerators.Value; if (bg.TryGetValue(t, out result)) { return((T)result); } if (_AllowCreatingNewGenerators != 1) { throw new InvalidOperationException("Cannot create a buffer generator after the flush operation has occurred"); } result = (IBufferGenerator)Activator.CreateInstance( t, this ); bg.Add(t, result); lock (_AllBufferGenerators) _AllBufferGenerators.Add(result); return((T)result); }
public T GetBufferGenerator <T> () where T : IBufferGenerator { var t = typeof(T); IBufferGenerator result = null; lock (_AllBufferGenerators) { if (_AllBufferGenerators.TryGetValue(t, out result)) { return((T)result); } } if (_AllowCreatingNewGenerators != 1) { throw new InvalidOperationException("Cannot create a buffer generator after the flush operation has occurred"); } result = (IBufferGenerator)Activator.CreateInstance( t, this ); lock (_AllBufferGenerators) { if (_AllBufferGenerators.TryGetValue(t, out IBufferGenerator lostRace)) { result.Dispose(); return((T)lostRace); } else { _AllBufferGenerators.Add(t, result); } } return((T)result); }