Ejemplo n.º 1
0
        /// <summary>
        /// Initializes graphics objects by loading a specified assembly, instancing the first type that implements
        /// <see cref="IGraphicsFactory"/>, and using the result to initialize the other graphics objects
        /// </summary>
        public static void Initialize( GraphicsInitialization init )
        {
            AppDomain.CurrentDomain.AssemblyResolve +=
                delegate( object sender, ResolveEventArgs args )
                {
                    string renderingDir = Path.GetDirectoryName( init.RenderingAssembly );
                    return Assembly.LoadFrom( Path.Combine( renderingDir, args.Name + ".dll" ) );
                };

            Assembly assembly;
            if ( File.Exists( init.RenderingAssembly ) )
            {
                assembly = Assembly.LoadFrom( init.RenderingAssembly );
            }
            else
            {
                assembly = AppDomain.CurrentDomain.Load( init.RenderingAssembly );
            }
            IGraphicsFactory factory = GetGraphicsFactoryFromAssembly( assembly, init );
            factory.CustomTypes.ScanAssembly( assembly );
            Initialize( factory );
        }
 /// <summary>
 /// Creates graphics initialization data for OpenGl on windows
 /// </summary>
 public static GraphicsInitialization OpenGlCgWindows( )
 {
     GraphicsInitialization init = new GraphicsInitialization
         (
             "Rb.Rendering.OpenGl",
             "Rb.Rendering.OpenGl.Cg",
             "Rb.Rendering.OpenGl.Windows"
         );
     return init;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Finds a type in the specified assembly that implements IGraphicsFactory, and returns an instance of that type
        /// </summary>
        private static IGraphicsFactory GetGraphicsFactoryFromAssembly( Assembly assembly, GraphicsInitialization init )
        {
            foreach ( Type type in assembly.GetTypes( ) )
            {
                if ( type.GetInterface( typeof( IGraphicsFactory ).Name ) != null )
                {
                    IGraphicsFactory factory = ( IGraphicsFactory )Activator.CreateInstance( type, init );
                    return factory;
                }
            }

            throw new ArgumentException( string.Format( "No type in assembly \"{0}\" implemented IGraphicsFactory", assembly.FullName ) );
        }