/// <inheritdoc /> protected override void Initialize() { base.Initialize(); if (CaptureRenderDocOnError) { renderDocManager = new RenderDocManager(); if (!renderDocManager.IsInitialized) { renderDocManager = null; } } // Disable streaming Streaming.Enabled = false; // Enable profiling //Profiler.EnableAll(); // Disable splash screen SceneSystem.SplashScreenEnabled = false; }
public static void Main() { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; EditorPath.EditorTitle = XenkoGameStudio.EditorName; if (IntPtr.Size == 4) { MessageBox.Show("Xenko GameStudio requires a 64bit OS to run.", "Xenko", MessageBoxButton.OK, MessageBoxImage.Error); Environment.Exit(1); } PrivacyPolicyHelper.RestartApplication = RestartApplication; PrivacyPolicyHelper.EnsurePrivacyPolicyXenko30(); // Set the XenkoDir environment variable var installDir = DirectoryHelper.GetInstallationDirectory("Xenko"); Environment.SetEnvironmentVariable("XenkoDir", installDir); // We use MRU of the current version only when we're trying to reload last session. var mru = new MostRecentlyUsedFileCollection(InternalSettings.LoadProfileCopy, InternalSettings.MostRecentlyUsedSessions, InternalSettings.WriteFile, XenkoGameStudio.EditorVersionMajor, false); mru.LoadFromSettings(); EditorSettings.Initialize(); Thread.CurrentThread.Name = "Main thread"; // Install Metrics for the editor using (XenkoGameStudio.MetricsClient = new MetricsClient(CommonApps.XenkoEditorAppId)) { try { // Environment.GetCommandLineArgs correctly process arguments regarding the presence of '\' and '"' var args = Environment.GetCommandLineArgs().Skip(1).ToList(); var startupSessionPath = XenkoEditorSettings.StartupSession.GetValue(); var lastSessionPath = EditorSettings.ReloadLastSession.GetValue() ? mru.MostRecentlyUsedFiles.FirstOrDefault() : null; var initialSessionPath = !UPath.IsNullOrEmpty(startupSessionPath) ? startupSessionPath : lastSessionPath?.FilePath; // Handle arguments for (var i = 0; i < args.Count; i++) { if (args[i] == "/LauncherWindowHandle") { windowHandle = new IntPtr(long.Parse(args[++i])); } else if (args[i] == "/NewProject") { initialSessionPath = null; } else if (args[i] == "/DebugEditorGraphics") { EmbeddedGame.DebugMode = true; } else if (args[i] == "/RenderDoc") { // TODO: RenderDoc is not working here (when not in debug) GameStudioPreviewService.DisablePreview = true; renderDocManager = new RenderDocManager(); } else if (args[i] == "/Reattach") { var debuggerProcessId = int.Parse(args[++i]); if (!System.Diagnostics.Debugger.IsAttached) { using (var debugger = VisualStudioDebugger.GetByProcess(debuggerProcessId)) { debugger?.Attach(); } } } else if (args[i] == "/RecordEffects") { GameStudioBuilderService.GlobalEffectLogPath = args[++i]; } else { initialSessionPath = args[i]; } } RuntimeHelpers.RunModuleConstructor(typeof(Asset).Module.ModuleHandle); //listen to logger for crash report GlobalLogger.GlobalMessageLogged += GlobalLoggerOnGlobalMessageLogged; mainDispatcher = Dispatcher.CurrentDispatcher; mainDispatcher.InvokeAsync(() => Startup(initialSessionPath)); using (new WindowManager(mainDispatcher)) { app = new App { ShutdownMode = ShutdownMode.OnExplicitShutdown }; app.Activated += (sender, eventArgs) => { XenkoGameStudio.MetricsClient?.SetActiveState(true); }; app.Deactivated += (sender, eventArgs) => { XenkoGameStudio.MetricsClient?.SetActiveState(false); }; app.InitializeComponent(); app.Run(); } renderDocManager?.Shutdown(); } catch (Exception e) { HandleException(e, 0); } } }
public static void Main() { // wait, are we already running? int waitToClose = 16; while (Process.GetProcessesByName("Focus.GameStudio").Length > 1) { if (waitToClose-- <= 0) { MessageBox.Show("Focus GameStudio is already running! Only one instance is possible at a time.", "Focus", MessageBoxButton.OK, MessageBoxImage.Error); Environment.Exit(1); } Thread.Sleep(250); } AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; EditorPath.EditorTitle = XenkoGameStudio.EditorName; if (IntPtr.Size == 4) { MessageBox.Show(EngineName + " " + GameStudioName + " requires a 64bit OS to run.", "Focus", MessageBoxButton.OK, MessageBoxImage.Error); Environment.Exit(1); } PrivacyPolicyHelper.RestartApplication = RestartApplication; PrivacyPolicyHelper.EnsurePrivacyPolicyXenko30(); // We use MRU of the current version only when we're trying to reload last session. var mru = new MostRecentlyUsedFileCollection(InternalSettings.LoadProfileCopy, InternalSettings.MostRecentlyUsedSessions, InternalSettings.WriteFile); mru.LoadFromSettings(); EditorSettings.Initialize(); Thread.CurrentThread.Name = "EditorGameThread (GameStudio)"; EntityManager.EnforceThreads = false; try { // Environment.GetCommandLineArgs correctly process arguments regarding the presence of '\' and '"' var args = Environment.GetCommandLineArgs().Skip(1).ToList(); var startupSessionPath = XenkoEditorSettings.StartupSession.GetValue(); var lastSessionPath = EditorSettings.ReloadLastSession.GetValue() ? mru.MostRecentlyUsedFiles.FirstOrDefault() : null; var initialSessionPath = !UPath.IsNullOrEmpty(startupSessionPath) ? startupSessionPath : lastSessionPath?.FilePath; // Handle arguments for (var i = 0; i < args.Count; i++) { if (args[i] == "/LauncherWindowHandle") { windowHandle = new IntPtr(long.Parse(args[++i])); } else if (args[i] == "/NewProject") { initialSessionPath = null; } else if (args[i] == "/DebugEditorGraphics") { EmbeddedGame.DebugMode = true; } else if (args[i] == "/RenderDoc") { // TODO: RenderDoc is not working here (when not in debug) GameStudioPreviewService.DisablePreview = true; renderDocManager = new RenderDocManager(); } else if (args[i] == "/Reattach") { var debuggerProcessId = int.Parse(args[++i]); if (!System.Diagnostics.Debugger.IsAttached) { using (var debugger = VisualStudioDebugger.GetByProcess(debuggerProcessId)) { debugger?.Attach(); } } } else if (args[i] == "/RecordEffects") { GameStudioBuilderService.GlobalEffectLogPath = args[++i]; } else { initialSessionPath = args[i]; } } RuntimeHelpers.RunModuleConstructor(typeof(Asset).Module.ModuleHandle); //listen to logger for crash report GlobalLogger.GlobalMessageLogged += GlobalLoggerOnGlobalMessageLogged; mainDispatcher = Dispatcher.CurrentDispatcher; mainDispatcher.InvokeAsync(() => Startup(initialSessionPath)); using (new WindowManager(mainDispatcher)) { app = new App { ShutdownMode = ShutdownMode.OnExplicitShutdown }; app.InitializeComponent(); app.Run(); } renderDocManager?.Shutdown(); } catch (Exception e) { HandleException(e, 0); } }