Beispiel #1
0
        public static void ShowWindow(ref bool windowOpened)
        {
            if (!GUI.Begin(WindowName, ref windowOpened))
            {
                GUI.End();
                return;
            }

            // Basic info
            GUIContext g = GetCurrentContext();

            Text("Hello ImGui {0}##Metrics.Version", GetVersion());
            Text("Application average {0:F3} ms/frame ({1:F1} FPS)##Metrics.FPS", 1000.0f / g.fps, g.fps);
            Text("{0} vertices, {1} indices ({2} triangles)##Metrics.VI",
                 VertexNumber, IndexNumber, IndexNumber / 3);
            Text("{0} active windows ({0} visible)##Metrics.Window", ActiveWindows, RenderWindows);
            Separator("separator0");

            //Windows
            var windowManager = g.WindowManager;

            NodeWindows(windowManager.Windows.ToArray(), "Windows");

            //Internal state
            if (TreeNode("Internal state"))
            {
                var w = g.WindowManager;
                Text("HoveredWindow: '{0}'",
                     w.HoveredWindow != null ? w.HoveredWindow.Name : "null");
                Text("HoveredRootWindow: '{0}'",
                     w.HoveredRootWindow != null ? w.HoveredRootWindow.Name : "null");
                // Data is "in-flight" so depending on when the Metrics window is called we may see
                // current frame information or not
                Text("HoveredId: {0:X8}/{1:X8}, AllowOverlap: {2}",
                     g.HoverId, g.HoveredIdPreviousFrame, g.HoverIdAllowOverlap);
                Text("ActiveId: {0:X8}/{1:X8}, AllowOverlap: {2}",
                     g.ActiveId, g.ActiveIdPreviousFrame, g.ActiveIdAllowOverlap);
                Text("ActiveIdWindow: '{0}'",
                     w.ActiveIdWindow != null ? w.ActiveIdWindow.Name : "null");
                Text("MovingWindow: '{0}'", w.MovingWindow != null ? w.MovingWindow.Name : "null");
                TreePop();
            }

            if (TreeNode("Tools"))
            {
                // The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted.
                if (Button("Item Picker.."))
                {
                    lastPickedItemId = 0;
                    g.DebugStartItemPicker();
                }

                if (g.DebugItemPickerBreakID != 0)
                {
                    lastPickedItemId = g.DebugItemPickerBreakID;
                }

                if (lastPickedItemId != 0)
                {
                    //get picked node
                    Node pickedNode = null;
                    var  w          = g.WindowManager.Windows;
                    foreach (var window in w)
                    {
                        var node = window.RenderTree.GetNodeById(lastPickedItemId);
                        if (node != null)
                        {
                            pickedNode = node;
                            break;
                        }
                    }

                    DoBoxModel(pickedNode);
                }
                else if (g.HoveredIdPreviousFrame != 0)
                {
                    //get picking node
                    Node pickingNode = null;
                    var  w           = g.WindowManager.Windows;
                    foreach (var window in w)
                    {
                        var node = window.RenderTree.GetNodeById(g.HoveredIdPreviousFrame);
                        if (node != null)
                        {
                            pickingNode = node;
                            break;
                        }
                    }
                    DoBoxModel(pickingNode);
                }

                TreePop();
            }

            GUI.End();
        }