private void App_Exit(object sender, EventArgs e) { CompositionTarget.Rendering -= CompositionTarget_RenderingHandler; Model.GlobalTimeChangedEvent -= Model_GlobalTimeChangedHandler; AutoBackup.Dispose(); SavePresets(); OperatorPartContext.DefaultRenderer.Dispose(); DefaultRenderer.DefaultEffect.Dispose(); Model.Dispose(); ResourceManager.DisposeAll(); D3DDevice.Device.Dispose(); D3DDevice.DX10_1Device.Dispose(); D3DDevice.Direct2DFactory.Dispose(); D3DDevice.DirectWriteFactory.Dispose(); Logger.Info(SHUT_DOWN_IDENTIFIER); Logger.Dispose(); if (D3DDevice.DebugDevice != null) { D3DDevice.DebugDevice.ReportLiveDeviceObjects(ReportingLevel.Detail); Utilities.DisposeObj(ref D3DDevice.DebugDevice); } }
private void SetupApplication() { //count to length of the Dispatcher-queue to later prevent frozen UI and slaggy performance Dispatcher.Hooks.OperationPosted += (o, e) => Interlocked.Increment(ref _queueLength); Dispatcher.Hooks.OperationStarted += (o, e) => Interlocked.Decrement(ref _queueLength); Dispatcher.Hooks.OperationAborted += (o, e) => Interlocked.Decrement(ref _queueLength); Logger.Initialize(Current.Dispatcher); Console.SetOut(new StreamToLogEntryWriter(LogEntry.EntryLevel.INF)); Console.SetError(new StreamToLogEntryWriter(LogEntry.EntryLevel.ERR)); ConsoleViewWriter = new Components.Console.ConsoleViewWriter(); Logger.AddWriter(ConsoleViewWriter); if (File.Exists(@"../.dropbox")) { throw new ArgumentException(String.Format("Tooll may not be started within this dropbox directory.\nPlease make a local copy to your hard drive, e.g. To your desktop.")); } // Load Configu if (!Directory.Exists("Config")) { Logger.Debug("Creating missing directory 'Config'..."); Directory.CreateDirectory("Config"); } ProjectSettings = new Settings("Config/ProjectSettings.json"); UserSettings = new Settings("Config/UserSettings.json"); if (UserSettings.GetOrSetDefault("Tooll.AutoBackupEnabled", true)) { TryToRecoverFromBackupAfterCrash(); } // Start Logging Directory.CreateDirectory(@"Log"); var logWriter = new FileWriter(String.Format(@"Log/{0}.log", DateTime.Now.ToString("yyyy_MM_dd-HH_mm_ss_fff"))) { Filter = LogEntry.EntryLevel.ALL }; Logger.AddWriter(logWriter); Logger.Info(STARTUP_IDENTIFIER_PRECEDING_TIMESTAMP + DateTime.Now); Logger.Info("Version: {0}", Core.Utilities.GetCompleteVersionString()); SetupOperatorGitRepository(); D3DDevice.Device = new Device(DriverType.Hardware, DeviceCreationFlags.BgraSupport); if (D3DDevice.Device.CreationFlags.HasFlag(DeviceCreationFlags.Debug)) { D3DDevice.DebugDevice = new DeviceDebug(D3DDevice.Device); } var featureLevel = D3DDevice.Device.FeatureLevel; Logger.Info("Found DirectX Device with feature level {0}", featureLevel); Logger.Info(".net version {0}", System.Environment.Version); using (var dxgiDevice = D3DDevice.Device.QueryInterface <SharpDX.DXGI.Device1>()) { var adapter = dxgiDevice.Adapter; D3DDevice.DX10_1Device = new SharpDX.Direct3D10.Device1(adapter, SharpDX.Direct3D10.DeviceCreationFlags.BgraSupport, SharpDX.Direct3D10.FeatureLevel.Level_10_1); } D3DDevice.Direct2DFactory = new SharpDX.Direct2D1.Factory(); D3DDevice.DirectWriteFactory = new SharpDX.DirectWrite.Factory(); SharpDX.RawInput.Device.RegisterDevice(UsagePage.Generic, UsageId.GenericKeyboard, SharpDX.RawInput.DeviceFlags.None, IntPtr.Zero); SharpDX.RawInput.Device.RegisterDevice(UsagePage.Generic, UsageId.GenericMouse, SharpDX.RawInput.DeviceFlags.None, IntPtr.Zero); SharpDX.RawInput.Device.RegisterDevice(UsagePage.Generic, UsageId.GenericJoystick, SharpDX.RawInput.DeviceFlags.None, IntPtr.Zero); ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage; ShutdownMode = ShutdownMode.OnExplicitShutdown; var progressDialog = new LoadOperatorDefinitionsProgressDialog(); progressDialog.ShowDialog(); ShutdownMode = ShutdownMode.OnMainWindowClose; Model = new Model(); var isSender = String.Compare(ProjectSettings.GetOrSetDefault("Tooll.IsHost", "true"), "true", StringComparison.OrdinalIgnoreCase) == 0; UndoRedoStack = new UndoRedoStack(isSender); if (!UserSettings.Contains("View.WorkspaceMatrices")) { UserSettings["View.WorkspaceMatrices"] = new Dictionary <Guid, Matrix>(); } else { var matrices = (JObject)UserSettings["View.WorkspaceMatrices"]; UserSettings["View.WorkspaceMatrices"] = JsonConvert.DeserializeObject <Dictionary <Guid, Matrix> >(matrices.ToString()); } MetaManager.OPERATOR_TEST_REFERENCE_PATH = ProjectSettings.GetOrSetDefault("Tooll.OperatorTestReferencePath", "assets-ff/test-references/"); OperatorPresetManager = new OperatorPresetManager(); AutoBackup = new AutoBackup(); AutoBackup.SecondsBetweenSaves = (int)UserSettings.GetOrSetDefault("Tooll.AutoBackupPeriodInSeconds", 60 * 5); AutoBackup.Enabled = UserSettings.GetOrSetDefault("Tooll.AutoBackupEnabled", true); if (AutoBackup.Enabled) { AutoBackup.ReduceNumberOfBackups(); } TimeLogger.Enabled = ProjectSettings.GetOrSetDefault("Tooll.ProfilingEnabled", false); UpdateRequiredAfterUserInteraction = false; CompositionTarget.Rendering += CompositionTarget_RenderingHandler; Model.GlobalTimeChangedEvent += Model_GlobalTimeChangedHandler; Exit += App_Exit; // Load demo soundtrack and setup bass sound system SetupSoundSystemWithSoundtrack(); }