コード例 #1
0
ファイル: RenderManager.cs プロジェクト: sq/Libraries
        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);
        }