/// <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(); } }
/// <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; }
public void Dispose() { _window.Dispose(); _audioManager.Dispose(); _renderEngine.Dispose(); }