This ResourceManager manages high-level vertex and fragment programs.
High-level vertex and fragment programs can be used instead of assembler programs as managed by GpuProgramManager; however they typically result in a GpuProgram being created as a derivative of the high-level program. High-level programs are easier to write, and can often be API-independent, unlike assembler programs.

This class not only manages the programs themselves, it also manages the factory classes which allow the creation of high-level programs using a variety of high-level syntaxes. Plugins can be created which register themselves as high-level program factories and as such the engine can be extended to accept virtually any kind of program provided a plugin is written.

Inheritance: Axiom.Core.ResourceManager
		/// <summary>
		///     Internal constructor.  This class cannot be instantiated externally.
		/// </summary>
		internal HighLevelGpuProgramManager()
			: base()
		{
			if ( _instance == null )
			{
				_instance = this;
				LoadingOrder = 50.0f;
				ResourceType = "HighLevelGpuProgram";

				ResourceGroupManager.Instance.RegisterResourceManager( ResourceType, this );
				AddFactory( new NullProgramFactory() );
				AddFactory( new UnifiedHighLevelGpuProgramFactory() );
			}
		}
        /// <summary>
        ///     Called when the engine is shutting down.
        /// </summary>
        public override void Dispose()
        {
            base.Dispose();

            instance = null;
        }
 /// <summary>
 ///     Internal constructor.  This class cannot be instantiated externally.
 /// </summary>
 internal HighLevelGpuProgramManager()
 {
     if (instance == null) {
         instance = this;
     }
 }
		/// <summary>
		///     Called when the engine is shutting down.
		/// </summary>
		/// <summary>
		///     Called when the engine is shutting down.
		/// </summary>
		protected override void dispose( bool disposeManagedResources )
		{
			if ( !IsDisposed )
			{
				if ( disposeManagedResources )
				{
                    foreach ( var currentFactory in factories )
                        currentFactory.SafeDispose();

                    factories.Clear();

					ResourceGroupManager.Instance.UnregisterResourceManager( ResourceType );
					_instance = null;
				}

				// There are no unmanaged resources to release, but
				// if we add them, they need to be released here.
			}

			// If it is available, make the call to the
			// base class's Dispose(Boolean) method
			base.dispose( disposeManagedResources );
		}
		/// <summary>
		///     Called when the engine is shutting down.
		/// </summary>
		/// <summary>
		///     Called when the engine is shutting down.
		/// </summary>
		protected override void dispose( bool disposeManagedResources )
		{
			if ( !this.IsDisposed )
			{
				if ( disposeManagedResources )
				{
					ResourceGroupManager.Instance.UnregisterResourceManager( ResourceType );
					_instance = null;
				}

				// There are no unmanaged resources to release, but
				// if we add them, they need to be released here.
			}

			// If it is available, make the call to the
			// base class's Dispose(Boolean) method
			base.dispose( disposeManagedResources );
		}