Example #1
0
        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);
            }
        }
Example #2
0
        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();
        }