Defines a generic resource handler.
A resource manager is responsible for managing a pool of resources of a particular type. It must index them, look them up, load and destroy them. It may also need to stay within a defined memory budget, and temporarily unload some resources if it needs to stay within this budget. Resource managers use a priority system to determine what can be unloaded, and a Least Recently Used (LRU) policy within resources of the same priority. Resources can be loaded using the generalized load interface, and they can be unloaded and removed. In addition, each subclass of ResourceManager will likely define custom 'load' methods which take explicit parameters depending on the kind of resource being created. Resources can be loaded and unloaded through the Resource class, but they can only be removed (and thus eventually destroyed) using their parent ResourceManager.
Inheritance: DisposableObject, IScriptLoader
Exemple #1
0
		private List<Image> loadedImages; //Used to hold images between calls to prepare and load.

		public GLES2Texture( ResourceManager creator, string name, ulong handle, string group, bool isManual, IManualResourceLoader loader, GLES2Support support )
			: base( creator, name, handle, group, isManual, loader )
		{
			this.textureID = 0;
			this.glSupport = support;
			this.surfaceList = new List<HardwarePixelBuffer>();
		}
Exemple #2
0
		public ARBGpuProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual,
		                      IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{
			// generate a new program
			Gl.glGenProgramsARB( 1, out programId );
		}
		public ATIFragmentShaderGpuProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{

			programType = Gl.GL_FRAGMENT_SHADER_ATI;
			programId = Gl.glGenFragmentShadersATI( 1 );
		}
		public ATIFragmentShaderGpuProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{
            throw new AxiomException("This needs upgrading");
			programType = Gl.GL_FRAGMENT_SHADER_ATI;
			programId = Gl.glGenFragmentShadersATI( 1 );
		}
		public NvparseFragmentProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{

			// create a display list
			programId = Gl.glGenLists( 1 );
		}
		public GLSLESCgProgram( ResourceManager creator, string name, ulong handle, string group, bool isManual, IManualResourceLoader loader )
			: base( creator, name, handle, group, isManual, loader )
		{
			/*Port notes
			 * Ogre does something odd with a dictionary here, it looks like it has to do with Material serialization 
			 */

			syntaxCode = "cg";
		}
		public NV3xGpuProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{

			// generate the program and store the unique name
			Gl.glGenProgramsNV( 1, out programId );

			// find the GL enum for the type of program this is
			programType = ( Type == GpuProgramType.Vertex ) ? Gl.GL_VERTEX_PROGRAM_NV : Gl.GL_FRAGMENT_PROGRAM_NV;
		}
Exemple #8
0
        public HLSLProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual,
                            IManualResourceLoader loader )
            : base( parent, name, handle, group, isManual, loader )
        {
            //var device = ( (XnaRenderWindow)Root.Instance.AutoWindow ).Driver.XnaDevice;
            //switch(type)
            //{
            //    case GpuProgramType.Fragment:
            //        assemblerProgram = new XnaFragmentProgram(parent, name, handle, group, isManual, loader, device);
            //        break;
            //    case GpuProgramType.Vertex:
            //        assemblerProgram = new XnaVertexProgram( parent, name, handle, group, isManual, loader, device );
            //        break;
            //    case GpuProgramType.Geometry:
            //        break;
            //}

            preprocessorDefines = string.Empty;
        }
Exemple #9
0
        internal XnaFragmentProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader, XFG.GraphicsDevice device )
			: base( parent, name, handle, group, isManual, loader, device )
		{
		}
Exemple #10
0
 internal D3D9GpuFragmentProgram(ResourceManager parent, string name, ResourceHandle handle, string group,
                                 bool isManual, IManualResourceLoader loader)
     : base(parent, name, handle, group, isManual, loader)
 {
     Type = GpuProgramType.Fragment;
 }
Exemple #11
0
        //protected int parametersMapSizeAsBuffer;

	    #endregion Fields

		#region Construction and Destruction

		/// <summary>
		/// Creates a new instance of <see cref="HLSLProgram"/>
		/// </summary>
		/// <param name="parent">the ResourceManager that owns this resource</param>
		/// <param name="name">Name of the program</param>
		/// <param name="handle">The resource id of the program</param>
		/// <param name="group">the resource group</param>
		/// <param name="isManual">is the program manually loaded?</param>
		/// <param name="loader">the loader responsible for this program</param>
		public HLSLProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{
			includeHandler = new HLSLIncludeHandler( this );
		    columnMajorMatrices = true;
		}
		public GLGpuProgram Create( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader, GpuProgramType type, string syntaxCode )
		{
			GLGpuProgram ret = new NvparseFragmentProgram( parent, name, handle, group, isManual, loader );
			ret.SyntaxCode = syntaxCode;
			ret.Type = type;
			return ret;
		}
Exemple #13
0
		/// <summary>
		///		Constructor.
		/// </summary>
		public GLSLProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{
		    InputOperationType = OperationType.TriangleList;
            OutputOperationType = OperationType.TriangleList;
		    MaxOutputVertices = 3;
            
            // Manually assign language now since we use it immediately
            SyntaxCode = "glsl";
		}
Exemple #14
0
		public Font( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual,
		             IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{
		}
			public DummyGpuProgram( ResourceManager creator, string name, ulong handle,
				string group, bool isManual, IManualResourceLoader loader )
				: base( creator, name, handle, group, isManual, loader )
			{
			}
		public override HighLevelGpuProgram CreateInstance( ResourceManager creator, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
		{
			return new UnifiedHighLevelGpuProgram( creator, name, handle, group, isManual, loader );
		}
Exemple #17
0
 internal NullProgram( ResourceManager creator, string name, ResourceHandle handle, string group )
     : this( creator, name, handle, group, false, null )
 {
 }
Exemple #18
0
		public Compositor( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{
			techniques = new List<CompositionTechnique>();
			readOnlyTechniques = new ReadOnlyCollection<CompositionTechnique>( techniques );
			supportedTechniques = new List<CompositionTechnique>();
			readOnlySupportedTechniques = new ReadOnlyCollection<CompositionTechnique>( supportedTechniques );
			globalTextures = new Dictionary<string, Texture>();
			globalMRTs = new Dictionary<string, MultiRenderTarget>();
			this.compilationRequired = true;
		}
Exemple #19
0
		/// <summary>
		///     Creates a new PatchMesh.
		/// </summary>
		/// <remarks>
		///     As defined in <see cref="MeshManager.CreateBezierPatch" />.
		/// </remarks>
		public PatchMesh( ResourceManager parent, string name, ResourceHandle handle, string group )
			: base( parent, name, handle, group, false, null )
		{
		}
Exemple #20
0
		public HLSLProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{
			preprocessorDefines = string.Empty;
		}
Exemple #21
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="creator"></param>
		/// <param name="name"></param>
		/// <param name="handle"></param>
		/// <param name="group"></param>
		/// <param name="isManual"></param>
		/// <param name="loader"></param>
		/// <param name="support"></param>
		public GLESTexture( ResourceManager creator, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader, GLESSupport support )
			: base( creator, name, handle, group, isManual, loader )
		{
			_support = support;
			_surfaceList = new List<HardwarePixelBuffer>();
		}
Exemple #22
0
		public XnaGpuProgram( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader, XFG.GraphicsDevice device )
			: base( parent, name, handle, group, isManual, loader )
		{
			this.device = device;
			this.shaderCode = null;
		}
Exemple #23
0
 /// <overloads>
 /// <summary>
 /// Standard constructor.
 /// </summary>
 /// <param name="parent">ResourceManager that is creating this resource</param>
 /// <param name="name">The unique name of the resource</param>
 /// <param name="handle"></param>
 /// <param name="group">The name of the resource group to which this resource belongs</param>
 /// </overloads>
 protected Resource(ResourceManager parent, string name, ResourceHandle handle, string group)
     : this(parent, name, handle, group, false, null)
 {
 }
		public GLGpuProgram Create( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual,
		                            IManualResourceLoader loader, GpuProgramType type, string syntaxCode )
		{
			// creates and returns a new ATI fragment shader implementation
			GLGpuProgram ret = new ATIFragmentShaderGpuProgram( parent, name, handle, group, isManual, loader );
			ret.Type = type;
			ret.SyntaxCode = syntaxCode;
			return ret;
		}
		internal UnifiedHighLevelGpuProgram( ResourceManager creator, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader )
			: base( creator, name, handle, group, isManual, loader )
		{
		}
Exemple #26
0
		/// <summary>
		///		Constructor, should be called through FontManager.Create().
		/// </summary>
		public Font( ResourceManager parent, string name, ResourceHandle handle, string group )
			: this( parent, name, handle, group, false, null )
		{
		}
Exemple #27
0
		/// <summary>
		///    Constructor.
		/// </summary>
		/// <param name="name">Name of this program.</param>
		/// <param name="type">Type of this program, vertex or fragment program.</param>
		/// <param name="language">HLSL language of this program.</param>
		/// <param name="context">CG context id.</param>
		public CgProgram( ResourceManager parent, string name, ulong handle, string group, bool isManual, IManualResourceLoader loader, IntPtr context )
			: base( parent, name, handle, group, isManual, loader )
		{
			cgContext = context;
		    selectedCgProfile = Cg.CG_PROFILE_UNKNOWN;
		}
Exemple #28
0
		public Mesh( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual,
		             IManualResourceLoader loader )
			: base( parent, name, handle, group, isManual, loader )
		{
			// This will be set to false by serializers 1.3 and above
			this._autoBuildEdgeLists = true;

			// default to static write only for speed
			this._vertexBufferUsage = BufferUsage.StaticWriteOnly;
			this._indexBufferUsage = BufferUsage.StaticWriteOnly;

			// default to having shadow buffers
			this._useVertexShadowBuffer = true;
			this._useIndexShadowBuffer = true;

			// Initialize to default strategy
			this._lodStrategy = LodStrategyManager.Instance.DefaultStrategy;

			// Init first (manual) lod
			var lod = new MeshLodUsage();
			lod.UserValue = float.NaN; // User value not used for base lod level
			lod.Value = this._lodStrategy.BaseValue;
			lod.EdgeData = null;
			lod.ManualMesh = null;
			this.meshLodUsageList.Add( lod );


			// always use software blending for now
			this.useSoftwareBlending = true;

			SkeletonName = "";
		}
Exemple #29
0
		public GLSLESProgram( ResourceManager creator, string name, ulong handle, string group, bool isManual, IManualResourceLoader loader )
			: base( creator, name, handle, group, isManual, loader )
		{
			this.glShaderHandle = 0;
			this.glProgramHandle = 0;
			this.compiled = 0;
			this.IsOptimized = false;
			this.optimizerEnabled = true;

			//todo: ogre does something funky with a dictionary here...

			syntaxCode = "glsles";
		}
Exemple #30
0
		/// <summary>
		///		Default constructor - used by BspResourceManager (do not call directly).
		/// </summary>
		/// <param name="name"></param>
		public BspLevel( ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual, IManualResourceLoader loader, NameValuePairList createParams )
			: base( parent, name, handle, group, isManual, loader )
		{
			objectToNodeMap = new MultiMap<MovableObject, BspNode>();
			this.createParam = createParams;
		}
Exemple #31
0
 protected D3D9GpuProgram(ResourceManager parent, string name, ResourceHandle handle, string group, bool isManual,
                          IManualResourceLoader loader)
     : base(parent, name, handle, group, isManual, loader)
 {
     D3D9RenderSystem.ResourceManager.NotifyResourceCreated(this);
 }
		internal UnifiedHighLevelGpuProgram( ResourceManager creator, string name, ResourceHandle handle, string group )
			: this( creator, name, handle, group, false, null )
		{
		}
Exemple #33
0
		/// <summary>
		///		Default constructor - used by <see cref="Quake3ShaderManager"/> (do not call directly)
		/// </summary>
		/// <param name="name">Shader name.</param>
		public Quake3Shader( ResourceManager parent, string name, ResourceHandle handle, string group )
			: base( parent, name, handle, group )
		{
			DeformFunc = ShaderDeformFunc.None;
			DeformParams = new float[5];
			this._cullingMode = ManualCullingMode.Back;
			this._pass = new List<ShaderPass>();
		}