static void GameWindowAdapter(string rootPath) { var installation = new GameInstallation(new AptEditorDefinition(), rootPath); using var game = new Game(installation, null, new Configuration { LoadShellMap = false }); // should be the ImGui context created by DeveloperModeView var initialContext = ImGui.GetCurrentContext(); var device = game.GraphicsDevice; var window = game.Window; using var imGuiRenderer = new ImGuiRenderer(device, game.Panel.OutputDescription, window.ClientBounds.Width, window.ClientBounds.Height); var font = imGuiRenderer.LoadSystemFont("consola.ttf"); using var commandList = device.ResourceFactory.CreateCommandList(); var ourContext = ImGui.GetCurrentContext(); // reset ImGui Context to initial one ImGui.SetCurrentContext(initialContext); var mainForm = new MainForm(game); void OnClientSizeChanged(object?sender, EventArgs args) { imGuiRenderer.WindowResized(window.ClientBounds.Width, window.ClientBounds.Height); } void OnRendering2D(object?sender, EventArgs e) { var previousContext = ImGui.GetCurrentContext(); ImGui.SetCurrentContext(ourContext); try { commandList.Begin(); commandList.SetFramebuffer(game.Panel.Framebuffer); imGuiRenderer.Update((float)game.RenderTime.DeltaTime.TotalSeconds, window.CurrentInputSnapshot); using (var fontSetter = new ImGuiFontSetter(font)) { mainForm.Draw(); } imGuiRenderer.Render(game.GraphicsDevice, commandList); commandList.End(); device.SubmitCommands(commandList); } finally { ImGui.SetCurrentContext(previousContext); } } window.ClientSizeChanged += OnClientSizeChanged; game.RenderCompleted += OnRendering2D; try { game.ShowMainMenu(); game.Run(); } finally { game.RenderCompleted -= OnRendering2D; window.ClientSizeChanged -= OnClientSizeChanged; } }