예제 #1
0
        public RendererWindow recreatePrimaryWindow()
        {
            destroyRendererWindow(primaryWindow);

            WindowInfo defaultWindowInfo;

            PluginManager.Instance.reconfigureDefaultWindow(out defaultWindowInfo);

            //Create the default window.
            Dictionary <String, String> miscParams = new Dictionary <string, string>();
            String fsaa = OgreConfig.FSAA;

            if (fsaa.Contains("Quality"))
            {
                miscParams.Add("FSAAHint", "Quality");
            }
            int spaceIndex = fsaa.IndexOf(' ');

            if (spaceIndex != -1)
            {
                fsaa = fsaa.Substring(0, spaceIndex);
            }
            miscParams.Add("FSAA", fsaa);
            miscParams.Add("vsync", OgreConfig.VSync.ToString());
            miscParams.Add("monitorIndex", defaultWindowInfo.MonitorIndex.ToString());
            miscParams.Add("useNVPerfHUD", OgreConfig.UseNvPerfHUD.ToString());
            miscParams.Add("contentScalingFactor", defaultWindowInfo.ContentScalingFactor.ToString());
            if (defaultWindowInfo.AutoCreateWindow)
            {
                RenderWindow renderWindow = root.createRenderWindow(defaultWindowInfo.AutoWindowTitle, (uint)defaultWindowInfo.Width, (uint)defaultWindowInfo.Height, defaultWindowInfo.Fullscreen, miscParams);
                OgreOSWindow ogreWindow   = new OgreOSWindow(renderWindow);
                primaryWindow = new AutomaticWindow(ogreWindow);
            }
            else
            {
                miscParams.Add("externalWindowHandle", defaultWindowInfo.EmbedWindow.WindowHandle.ToString());
                RenderWindow renderWindow = root.createRenderWindow(defaultWindowInfo.AutoWindowTitle, (uint)defaultWindowInfo.Width, (uint)defaultWindowInfo.Height, defaultWindowInfo.Fullscreen, miscParams);
                primaryWindow = new EmbeddedWindow(defaultWindowInfo.EmbedWindow, renderWindow);
            }
            defaultWindowInfo._fireWindowCreated(new WindowInfoEventArgs(primaryWindow));

            return(primaryWindow);
        }
예제 #2
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="ogreWindow">The OgreOSWindow that Ogre created.</param>
 public AutomaticWindow(OgreOSWindow ogreWindow)
 {
     this.ogreWindow = ogreWindow;
 }
예제 #3
0
        public void initialize(PluginManager pluginManager, IServiceCollection serviceCollection)
        {
            //Load config
            new OgreConfig(pluginManager.ConfigFile);
            chosenRenderSystem = OgreConfig.RenderSystemType;

            //Setup ogre root
            root = new Root("", "", "");
            renderSystemPlugin = OgreInterface_LoadRenderSystem(ref chosenRenderSystem);
            ogreUpdate         = new OgreUpdate(root);
            instance           = this;

            WindowInfo defaultWindowInfo;

            pluginManager.setRendererPlugin(this, out defaultWindowInfo);

            try
            {
                //Initialize Ogre
                rs = root._getRenderSystemWrapper(OgreInterface_GetRenderSystem(ref chosenRenderSystem));
                root.setRenderSystem(rs);
                root.initialize(false);

                //Create the default window.
                Dictionary <String, String> miscParams = new Dictionary <string, string>();
                String fsaa = OgreConfig.FSAA;
                if (fsaa.Contains("Quality"))
                {
                    miscParams.Add("FSAAHint", "Quality");
                }
                int spaceIndex = fsaa.IndexOf(' ');
                if (spaceIndex != -1)
                {
                    fsaa = fsaa.Substring(0, spaceIndex);
                }
                miscParams.Add("FSAA", fsaa);
                miscParams.Add("vsync", OgreConfig.VSync.ToString());
                miscParams.Add("monitorIndex", defaultWindowInfo.MonitorIndex.ToString());
                miscParams.Add("useNVPerfHUD", OgreConfig.UseNvPerfHUD.ToString());
                miscParams.Add("contentScalingFactor", defaultWindowInfo.ContentScalingFactor.ToString());
                if (defaultWindowInfo.AutoCreateWindow)
                {
                    RenderWindow renderWindow = root.createRenderWindow(defaultWindowInfo.AutoWindowTitle, (uint)defaultWindowInfo.Width, (uint)defaultWindowInfo.Height, defaultWindowInfo.Fullscreen, miscParams);
                    OgreOSWindow ogreWindow   = new OgreOSWindow(renderWindow);
                    primaryWindow = new AutomaticWindow(ogreWindow);
                }
                else
                {
                    miscParams.Add("externalWindowHandle", defaultWindowInfo.EmbedWindow.WindowHandle.ToString());
                    RenderWindow renderWindow = root.createRenderWindow(defaultWindowInfo.AutoWindowTitle, (uint)defaultWindowInfo.Width, (uint)defaultWindowInfo.Height, defaultWindowInfo.Fullscreen, miscParams);
                    primaryWindow = new EmbeddedWindow(defaultWindowInfo.EmbedWindow, renderWindow);
                }

                if (InitialClearColor.HasValue)
                {
                    rs.clearFrameBuffer(FrameBufferType.FBT_COLOUR, InitialClearColor.Value);
                    primaryWindow.OgreRenderTarget.update(true);
                }

                defaultWindowInfo._fireWindowCreated(new WindowInfoEventArgs(primaryWindow));

                //Setup compressed textures
                SelectedTextureFormat = OgreInterface_SetupVaryingCompressedTextures(CompressedTextureSupport);

                //Setup commands
                pluginManager.addCreateSimElementManagerCommand(new AddSimElementManagerCommand("Create Ogre Scene Manager", OgreSceneManagerDefinition.Create));
                pluginManager.addCreateSimElementCommand(new AddSimElementCommand("Create Ogre Scene Node", SceneNodeDefinition.Create));

                //Setup shader cache
                if (MicrocodeCachePath != null)
                {
                    GpuProgramManager.Instance.SaveMicrocodesToCache = true;
                    if (File.Exists(MicrocodeCachePath))
                    {
                        if (AllowMicrocodeCacheLoad)
                        {
                            using (Stream stream = File.OpenRead(MicrocodeCachePath))
                            {
                                GpuProgramManager.Instance.loadMicrocodeCache(stream);
                                Log.Info("Using microcode cache {0}", MicrocodeCachePath);
                            }
                        }
                        else
                        {
                            deleteMicrocodeCache();
                        }
                    }
                }

                //Setup Resources
                pluginManager.addSubsystemResources("Ogre", OgreResourceManager.Instance);

                //Setup the device lost listener.
                deviceLostListener = new DeviceLostListener();
                rs.addListener(deviceLostListener);

                serviceCollection.TryAddSingleton <Root>(this.root);                                       //This is externally owned

                serviceCollection.TryAddSingleton <RendererWindow>(this.PrimaryWindow);                    //This is externally owned

                serviceCollection.TryAddSingleton <RenderTarget>(this.OgrePrimaryWindow.OgreRenderTarget); //This is externally owned

                serviceCollection.TryAddSingleton <SceneViewLightManager>(s => s.GetRequiredService <PluginManager>().RendererPlugin.createSceneViewLightManager());

                serviceCollection.TryAddSingleton <FrameClearManager>(s => new FrameClearManager(s.GetRequiredService <RenderTarget>(), Color.FromRGB(0x333333)));
            }
            catch (Exception e)
            {
                throw new InvalidPluginException(String.Format("Exception initializing renderer. Message: {0}", e.Message), e);
            }
        }
예제 #4
0
 public OgreWindowListener(OgreOSWindow ogreWindow)
 {
     this.ogreWindow = ogreWindow;
 }