Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }