Exemple #1
0
        /// <summary>
        /// Disposes the specified engine.
        /// </summary>
        /// <param name="engine">Engine to dispose</param>
        /// <param name="repopulateEngines">
        /// If <c>true</c>, a new engine will be created to replace the disposed engine
        /// </param>
        public virtual void DisposeEngine(IRenderEngine engine, bool repopulateEngines = true)
        {
            engine.Dispose();
            _metadata.Remove(engine);
            Interlocked.Decrement(ref _engineCount);

            if (repopulateEngines)
            {
                // Ensure we still have at least the minimum number of engines.
                PopulateEngines();
            }
        }
Exemple #2
0
        /// <summary>
        /// Returns an engine to the pool so it can be reused
        /// </summary>
        /// <param name="engine">Engine to return</param>
        public virtual void ReturnEngineToPool(IRenderEngine engine)
        {
            if (!_metadata.ContainsKey(engine))
            {
                // This engine was from another pool. This could happen if a pool is recycled
                // and replaced with a different one. Let's just pretend we never saw it.
                engine.Dispose();
                return;
            }

            _metadata[engine].InUse = false;
            var usageCount = _metadata[engine].UsageCount;

            if (_options.MaxUsagesPerEngine > 0 && usageCount >= _options.MaxUsagesPerEngine)
            {
                // Engine has been reused the maximum number of times, recycle it.
                DisposeEngine(engine);
                return;
            }

            _availableEngines.Add(engine);
        }
 /// <summary>
 /// Dispose of the render engine
 /// </summary>
 public virtual void Dispose()
 {
     _disposed = true;
     _renderEngine?.Dispose();
     _renderEngine = null;
 }
Exemple #4
0
 public void Dispose()
 {
     _window.Dispose();
     _audioManager.Dispose();
     _renderEngine.Dispose();
 }