using System; using System.Collections.Generic; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license namespace ANX.RenderSystem.GL3.Helpers { internal static class GraphicsResourceManager { #region Private private static List<Texture2DGL3> allTextures; private static List<EffectGL3> allEffects; private static List<VertexBufferGL3> allVertexBuffers; private static List<IndexBufferGL3> allIndexBuffers; #endregion #region Constructor static GraphicsResourceManager() { allTextures = new List<Texture2DGL3>(); allEffects = new List<EffectGL3>(); allVertexBuffers = new List<VertexBufferGL3>(); allIndexBuffers = new List<IndexBufferGL3>(); } #endregion #region UpdateResource public static void UpdateResource<T>(T resource, bool register) { IList<T> list = null; if (typeof(T) == typeof(Texture2DGL3)) { list = (IList<T>)allTextures; } else if (typeof(T) == typeof(EffectGL3)) { list = (IList<T>)allEffects; } else if (typeof(T) == typeof(VertexBufferGL3)) { list = (IList<T>)allVertexBuffers; } else if (typeof(T) == typeof(IndexBufferGL3)) { list = (IList<T>)allIndexBuffers; } lock (list) { if (register) { list.Add(resource); } else { list.Remove(resource); } } } #endregion #region DisposeAllResources public static void DisposeAllResources() { #region Textures lock (allTextures) { foreach (Texture2DGL3 texture in allTextures) { if (texture.IsDisposed == false) { texture.DisposeResource(); } } } #endregion #region Effects lock (allEffects) { foreach (EffectGL3 effect in allEffects) { if (effect.IsDisposed == false) { effect.DisposeResource(); } } } #endregion #region VertexBuffers lock (allVertexBuffers) { foreach (VertexBufferGL3 buffer in allVertexBuffers) { if (buffer.IsDisposed == false) { buffer.DisposeResource(); } } } #endregion #region IndexBuffers lock (allIndexBuffers) { foreach (IndexBufferGL3 buffer in allIndexBuffers) { if (buffer.IsDisposed == false) { buffer.DisposeResource(); } } } #endregion } #endregion #region RecreateAllResources public static void RecreateAllResources() { #region Textures lock (allTextures) { foreach (Texture2DGL3 texture in allTextures) { if (texture.IsDisposed == false) { texture.RecreateData(); } } } #endregion #region Effects lock (allEffects) { foreach (EffectGL3 effect in allEffects) { if (effect.IsDisposed == false) { effect.RecreateData(); } } } #endregion #region VertexBuffers lock (allVertexBuffers) { foreach (VertexBufferGL3 buffer in allVertexBuffers) { if (buffer.IsDisposed == false) { buffer.RecreateData(); } } } #endregion #region IndexBuffers lock (allIndexBuffers) { foreach (IndexBufferGL3 buffer in allIndexBuffers) { if (buffer.IsDisposed == false) { buffer.RecreateData(); } } } #endregion if (BlendStateGL3.Current != null) { BlendStateGL3.Current.Apply(null); } if (RasterizerStateGL3.Current != null) { RasterizerStateGL3.Current.Apply(null); } if (DepthStencilStateGL3.Current != null) { DepthStencilStateGL3.Current.Apply(null); } } #endregion } }