예제 #1
0
 public TextureViewer(string title, Texture2D tex, bool disposeTex = true)
 {
     this.tex = tex;
     this.tid = ImGuiHelper.RegisterTexture(tex);
     Title    = title;
     dispose  = disposeTex;
 }
예제 #2
0
        void ImportTexture()
        {
            string path;

            if ((path = FileDialog.Open()) != null)
            {
                var src = TextureImport.OpenFile(path);
                if (src.Type == TexLoadType.ErrorLoad ||
                    src.Type == TexLoadType.ErrorNonSquare ||
                    src.Type == TexLoadType.ErrorNonPowerOfTwo)
                {
                    main.ErrorDialog(TextureImport.LoadErrorString(src.Type, path));
                }
                else if (src.Type == TexLoadType.DDS)
                {
                    src.Texture.Dispose();
                    selectedNode.Children = null;
                    selectedNode.Data     = File.ReadAllBytes(path);
                }
                else
                {
                    teximportprev = src.Texture;
                    teximportpath = path;
                    teximportid   = ImGuiHelper.RegisterTexture(teximportprev);
                    popups.OpenPopup("Texture Import");
                }
            }
        }
예제 #3
0
 public override bool Draw()
 {
     if (ImGuiExt.BeginDock(Title + "##" + Unique, ref open, 0))
     {
         var renderWidth  = Math.Max(120, (int)ImGui.GetWindowWidth() - 5);
         var renderHeight = Math.Max(120, (int)ImGui.GetWindowHeight() - 40);
         //Generate render target
         if (rh != renderHeight || rw != renderWidth)
         {
             if (renderTarget != null)
             {
                 ImGuiHelper.DeregisterTexture(renderTarget);
                 renderTarget.Dispose();
             }
             renderTarget = new RenderTarget2D(renderWidth, renderHeight);
             rid          = ImGuiHelper.RegisterTexture(renderTarget);
             rw           = renderWidth;
             rh           = renderHeight;
         }
         DrawGL(renderWidth, renderHeight);
         //Draw Image
         ImGui.Image((IntPtr)rid, new Vector2(renderWidth, renderHeight), Vector2.Zero, Vector2.One, Vector4.One, Vector4.One);
     }
     ImGuiExt.EndDock();
     return(open);
 }
예제 #4
0
        void ImportTexture()
        {
            string path;

            if ((path = FileDialog.Open()) != null)
            {
                bool isDDS;
                using (var stream = File.OpenRead(path))
                {
                    isDDS = LibreLancer.ImageLib.DDS.StreamIsDDS(stream);
                }
                if (isDDS)
                {
                    selectedNode.Children = null;
                    selectedNode.Data     = File.ReadAllBytes(path);
                }
                else
                {
                    try
                    {
                        teximportprev = LibreLancer.ImageLib.Generic.FromFile(path);
                        teximportpath = path;
                        teximportid   = ImGuiHelper.RegisterTexture(teximportprev);
                        popups.OpenPopup("Texture Import");
                    }
                    catch (Exception)
                    {
                        ErrorPopup("Could not open file as image");
                    }
                }
            }
        }
예제 #5
0
        public void Open(string filename, string icoName = null, bool tmp = false)
        {
            iconName    = icoName ?? Path.GetFileNameWithoutExtension(filename);
            texFilename = filename;
            error       = false;
            if (teximportprev != null)
            {
                ImGuiHelper.DeregisterTexture(teximportprev);
                teximportprev.Dispose();
                teximportprev = null;
            }

            var src = TextureImport.OpenFile(filename);

            loadType      = src.Type;
            teximportprev = src.Texture;
            if (loadType == TexLoadType.ErrorLoad ||
                loadType == TexLoadType.ErrorNonSquare ||
                loadType == TexLoadType.ErrorNonPowerOfTwo)
            {
                win.ErrorDialog(TextureImport.LoadErrorString(loadType, filename));
                return;
            }
            teximportid = ImGuiHelper.RegisterTexture(teximportprev);
            doOpen      = true;
            this.tmp    = tmp;
        }
예제 #6
0
        public void Begin(int fixWidth = -1, int fixHeight = -1)
        {
            var renderWidth  = Math.Max(120, (int)ImGui.GetWindowWidth() - MarginW);
            var renderHeight = Math.Max(120, (int)ImGui.GetWindowHeight() - MarginH);

            if (fixWidth > 0)
            {
                renderWidth = fixWidth;
            }
            if (fixHeight > 0)
            {
                renderHeight = fixHeight;
            }
            //Generate render target
            if (rh != renderHeight || rw != renderWidth)
            {
                if (RenderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(RenderTarget);
                    RenderTarget.Dispose();
                }
                RenderTarget = new RenderTarget2D(renderWidth, renderHeight);
                rid          = ImGuiHelper.RegisterTexture(RenderTarget);
                rw           = renderWidth;
                rh           = renderHeight;
            }
            cc = rstate.ClearColor;
            RenderTarget.BindFramebuffer();
            vps.Push(0, 0, rw, rh);
            rstate.Cull         = true;
            rstate.DepthEnabled = true;
            rstate.ClearColor   = Background;
            rstate.ClearAll();
        }
예제 #7
0
 public TextureViewer(string title, Texture2D tex, TexFrameAnimation anim, bool disposeTex = true)
 {
     this.tex  = tex;
     this.tid  = ImGuiHelper.RegisterTexture(tex);
     Title     = title;
     dispose   = disposeTex;
     this.anim = anim;
 }
예제 #8
0
        public void Begin(int fixWidth = -1, int fixHeight = -1)
        {
            ImGuiHelper.AnimatingElement();
            var renderWidth  = Math.Max(120, (int)ImGui.GetWindowWidth() - MarginW);
            var renderHeight = Math.Max(120, (int)ImGui.GetWindowHeight() - MarginH);

            if (fixWidth > 0)
            {
                renderWidth = fixWidth;
            }
            if (fixHeight > 0)
            {
                renderHeight = fixHeight;
            }
            //Generate render target
            if (rh != renderHeight || rw != renderWidth)
            {
                if (RenderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(RenderTarget.Texture);
                    RenderTarget.Dispose();
                }
                RenderTarget = new RenderTarget2D(renderWidth, renderHeight);
                rid          = ImGuiHelper.RegisterTexture(RenderTarget.Texture);
                rw           = renderWidth;
                rh           = renderHeight;
            }
            if (mw.Config.MSAA != 0 && ((mrw != rw) || (mrh != rh) || (msamples != mw.Config.MSAA)))
            {
                if (msaa != null)
                {
                    msaa.Dispose();
                }
                msaa = new MultisampleTarget(rw, rh, mw.Config.MSAA);
            }
            else if (msaa != null)
            {
                msaa.Dispose();
                mrw      = mrh = -1;
                msamples = 0;
                msaa     = null;
            }
            cc = rstate.ClearColor;
            if (mw.Config.MSAA != 0)
            {
                rstate.RenderTarget = msaa;
            }
            else
            {
                rstate.RenderTarget = RenderTarget;
            }
            vps.Push(0, 0, rw, rh);
            rstate.Cull         = true;
            rstate.DepthEnabled = true;
            rstate.ClearColor   = Background;
            rstate.ClearAll();
        }
예제 #9
0
        public static unsafe void Apply()
        {
            var s = ImGui.GetStyle();

            //Settings
            s.FrameRounding              = 2;
            s.ScrollbarSize              = 12;
            s.ScrollbarRounding          = 3;
            s.NativePtr->FrameBorderSize = 1f;
            //Colours
            s.SetColor(ColorTarget.WindowBg, RGBA(21, 21, 22, 128));
            s.SetColor(ColorTarget.Border, RGBA(83, 83, 83, 255));
            s.SetColor(ColorTarget.FrameBg, RGBA(56, 57, 58, 255));
            s.SetColor(ColorTarget.PopupBg, RGBA(56, 57, 58, 255));
            s.SetColor(ColorTarget.FrameBgHovered, RGBA(66, 133, 190, 255));
            s.SetColor(ColorTarget.Header, RGBA(88, 178, 255, 132));
            s.SetColor(ColorTarget.HeaderActive, RGBA(88, 178, 255, 164));
            s.SetColor(ColorTarget.FrameBgActive, RGBA(95, 97, 98, 255));
            s.SetColor(ColorTarget.MenuBarBg, RGBA(66, 67, 69, 255));
            s.SetColor(ColorTarget.ScrollbarBg, RGBA(51, 64, 77, 153));
            s.SetColor(ColorTarget.Button, RGBA(128, 128, 128, 88));

            using (var stream = typeof(Theme).Assembly.GetManifestResourceStream("LancerEdit.UILib.icons.png")) {
                iconTexture = Generic.FromStream(stream);
                iconId      = ImGuiHelper.RegisterTexture(iconTexture);
            }
            using (var reader = new StreamReader(typeof(Theme).Assembly.GetManifestResourceStream("LancerEdit.UILib.icons.txt"))) {
                while (!reader.EndOfStream)
                {
                    var ln = reader.ReadLine().Trim();
                    if (string.IsNullOrEmpty(ln))
                    {
                        continue;
                    }
                    var sp   = ln.Split('=');
                    var n    = sp[0].Trim();
                    var vals = sp[1].Trim().Split(' ').Select(float.Parse).ToArray();
                    var uv0  = new Vector2(vals[0] / iconTexture.Width,
                                           1 - (vals[1] / iconTexture.Height));
                    var uv1 = new Vector2((vals[0] + vals[2]) / iconTexture.Width,
                                          1 - (vals[1] + vals[3]) / iconTexture.Height);
                    icons.Add(n, new TCoordinates()
                    {
                        UV0 = uv0, UV1 = uv1, Size = new Vector2(vals[2], vals[3])
                    });
                }
            }
        }
예제 #10
0
        void DoViewport()
        {
            var renderWidth  = Math.Max(120, (int)ImGui.GetWindowWidth() - 15);
            var renderHeight = Math.Max(120, (int)ImGui.GetWindowHeight() - 40);

            //Generate render target
            if (rh != renderHeight || rw != renderWidth)
            {
                if (renderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(renderTarget);
                    renderTarget.Dispose();
                }
                renderTarget = new RenderTarget2D(renderWidth, renderHeight);
                rid          = ImGuiHelper.RegisterTexture(renderTarget);
                rw           = renderWidth;
                rh           = renderHeight;
            }
            DrawGL(renderWidth, renderHeight);
            ImGui.ImageButton((IntPtr)rid, new Vector2(renderWidth, renderHeight),
                              Vector2.Zero, Vector2.One,
                              0,
                              Vector4.One, Vector4.One);
            if (ImGui.IsItemHovered(HoveredFlags.Default))
            {
                if (ImGui.IsMouseDragging(0, 1f))
                {
                    var delta = (Vector2)ImGui.GetMouseDragDelta(0, 1f);
                    rotation -= (delta / 64);
                    ImGui.ResetMouseDragDelta(0);
                }
                float wheel = ImGui.GetIO().MouseWheel;
                if (ImGui.GetIO().ShiftPressed)
                {
                    zoom -= wheel * 10;
                }
                else
                {
                    zoom -= wheel * 40;
                }
                if (zoom < 0)
                {
                    zoom = 0;
                }
            }
        }
예제 #11
0
        public void Draw(float width)
        {
            icard.Recalculate(width);
            if (icard.Height < 1 || width < 1)
            {
                ImGui.Dummy(new Vector2(1, 1));
                return;
            }
            if (icard.Height != renderHeight || (int)width != renderWidth)
            {
                renderWidth  = (int)width;
                renderHeight = (int)icard.Height;
                if (renderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(renderTarget.Texture);
                    renderTarget.Dispose();
                }
                renderTarget = new RenderTarget2D(renderWidth, renderHeight);
                rid          = ImGuiHelper.RegisterTexture(renderTarget.Texture);
            }

            window.RenderContext.RenderTarget = renderTarget;
            window.RenderContext.PushViewport(0, 0, renderWidth, renderHeight);
            var cc = window.RenderContext.ClearColor;

            window.RenderContext.ClearColor = Color4.Transparent;
            window.RenderContext.ClearAll();
            window.RenderContext.ClearColor = cc;
            window.RichText.RenderText(icard, 0, 0);
            window.RenderContext.RenderTarget = null;
            window.RenderContext.PopViewport();

            var cPos     = (Vector2)ImGui.GetCursorPos();
            var wPos     = (Vector2)ImGui.GetWindowPos();
            var scrPos   = -ImGui.GetScrollY();
            var mOffset  = cPos + wPos + new Vector2(0, scrPos);
            var drawList = ImGui.GetWindowDrawList();

            drawList.AddImage((IntPtr)rid,
                              new Vector2((int)mOffset.X, (int)mOffset.Y),
                              new Vector2((int)(mOffset.X + renderWidth), (int)(mOffset.Y + icard.Height)),
                              new Vector2(0, 1), new Vector2(1, 0));

            ImGui.InvisibleButton("##infocardbutton", new System.Numerics.Vector2(renderWidth, icard.Height));
        }
예제 #12
0
 public override bool Draw()
 {
     if (ImGuiExt.BeginDock(Title + "###" + Unique, ref open, 0))
     {
         ImGui.Text("View Mode:");
         ImGui.SameLine();
         ImGui.Combo("##modes", ref viewMode, viewModes);
         ImGui.SameLine();
         ImGui.Checkbox("Wireframe", ref doWireframe);
         var renderWidth  = Math.Max(120, (int)ImGui.GetWindowWidth() - 15);
         var renderHeight = Math.Max(120, (int)ImGui.GetWindowHeight() - 70);
         //Generate render target
         if (rh != renderHeight || rw != renderWidth)
         {
             if (renderTarget != null)
             {
                 ImGuiHelper.DeregisterTexture(renderTarget);
                 renderTarget.Dispose();
             }
             renderTarget = new RenderTarget2D(renderWidth, renderHeight);
             rid          = ImGuiHelper.RegisterTexture(renderTarget);
             rw           = renderWidth;
             rh           = renderHeight;
         }
         DrawGL(renderWidth, renderHeight);
         //Draw Image
         //ImGui.Image((IntPtr)rid, new Vector2(renderWidth, renderHeight), Vector2.Zero, Vector2.One, Vector4.One, Vector4.One);
         ImGui.ImageButton((IntPtr)rid, new Vector2(renderWidth, renderHeight),
                           Vector2.Zero, Vector2.One,
                           0,
                           Vector4.One, Vector4.One);
         if (ImGui.IsItemHovered(HoveredFlags.Default))
         {
             if (ImGui.IsMouseDragging(0, 1f))
             {
                 var delta = (Vector2)ImGui.GetMouseDragDelta(0, 1f);
                 rotation -= (delta / 64);
                 ImGui.ResetMouseDragDelta(0);
             }
         }
     }
     ImGuiExt.EndDock();
     return(open);
 }
예제 #13
0
        public void Draw(float width)
        {
            icard.Recalculate(width);

            if (icard.Height != renderHeight || (int)width != renderWidth)
            {
                renderWidth  = (int)width;
                renderHeight = (int)icard.Height;
                if (renderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(renderTarget);
                    renderTarget.Dispose();
                }
                renderTarget = new RenderTarget2D(renderWidth, renderHeight);
                rid          = ImGuiHelper.RegisterTexture(renderTarget);
            }
            renderTarget.BindFramebuffer();
            window.Viewport.Push(0, 0, renderWidth, renderHeight);
            var cc = window.RenderState.ClearColor;

            window.RenderState.ClearColor = Color4.Transparent;
            window.RenderState.ClearAll();
            window.RenderState.ClearColor = cc;
            window.Renderer2D.Start(renderWidth, renderHeight);
            window.RichText.RenderText(icard, 0, 0);
            window.Renderer2D.Finish();
            RenderTarget2D.ClearBinding();
            window.Viewport.Pop();

            //ImGui. Base off ImageButton so we can get input for selection later
            var style = ImGui.GetStyle();
            var btn   = style.Colors[(int)ImGuiCol.Button];

            ImGui.PushStyleColor(ImGuiCol.ButtonHovered, btn);
            ImGui.PushStyleColor(ImGuiCol.ButtonActive, btn);
            ImGui.ImageButton((IntPtr)rid, new Vector2(renderWidth, icard.Height),
                              new Vector2(0, 1), new Vector2(1, 0),
                              0,
                              Vector4.Zero, Vector4.One);
            ImGui.PopStyleColor();
            ImGui.PopStyleColor();
            //Somehow keep track of selection? (idk if InfocardDisplay should do this)
        }
예제 #14
0
 protected override void Load()
 {
     DefaultMaterialMap.Init();
     Title     = "LancerEdit";
     guiHelper = new ImGuiHelper(this, DpiScale * Config.UiScale);
     guiHelper.PauseWhenUnfocused = Config.PauseWhenUnfocused;
     Audio = new AudioManager(this);
     FileDialog.RegisterParent(this);
     options     = new OptionsWindow(this);
     Resources   = new GameResourceManager(this);
     Commands    = new CommandBuffer();
     Polyline    = new PolylineRender(Commands);
     DebugRender = new PhysicsDebugRenderer();
     RenderContext.PushViewport(0, 0, 800, 600);
     Keyboard.KeyDown += Keyboard_KeyDown;
     //TODO: Icon-setting code very messy
     using (var stream = typeof(MainWindow).Assembly.GetManifestResourceStream("LancerEdit.reactor_64.png"))
     {
         var icon = LibreLancer.ImageLib.Generic.BytesFromStream(stream);
         SetWindowIcon(icon.Width, icon.Height, icon.Data);
     }
     using (var stream = typeof(MainWindow).Assembly.GetManifestResourceStream("LancerEdit.reactor_128.png"))
     {
         var icon = (Texture2D)LibreLancer.ImageLib.Generic.FromStream(stream);
         logoTexture = ImGuiHelper.RegisterTexture(icon);
     }
     //Open passed in files!
     if (InitOpenFile != null)
     {
         foreach (var f in InitOpenFile)
         {
             OpenFile(f);
         }
     }
     RichText = RenderContext.Renderer2D.CreateRichTextEngine();
     Fonts    = new FontManager();
     Fonts.ConstructDefaultFonts();
     Services.Add(Fonts);
     Make3dbDlg = new CommodityIconDialog(this);
     LoadScripts();
 }
예제 #15
0
        public override bool Draw()
        {
            //Fx management
            lastEffect = currentEffect;
            ImGui.Text("Effect:");
            ImGui.SameLine();
            ImGui.Combo("##effect", ref currentEffect, effectNames);
            if (currentEffect != lastEffect)
            {
                SetupRender(currentEffect);
            }
            ImGui.SameLine();
            ImGui.Button("+");
            ImGui.SameLine();
            ImGui.Button("-");
            ImGui.Separator();
            //Layout
            ImGui.Columns(2, "##alecolumns", true);
            ImGui.Text("Viewport");
            ImGui.NextColumn();
            ImGui.Text("Hierachy");
            ImGui.Separator();
            ImGui.NextColumn();
            ImGui.BeginChild("##renderchild");
            //Viewport Rendering
            var renderWidth  = Math.Max(120, (int)ImGui.GetWindowWidth() - 15);
            var renderHeight = Math.Max(120, (int)ImGui.GetWindowHeight() - 70);

            //Generate render target
            if (rh != renderHeight || rw != renderWidth)
            {
                if (renderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(renderTarget);
                    renderTarget.Dispose();
                }
                renderTarget = new RenderTarget2D(renderWidth, renderHeight);
                rid          = ImGuiHelper.RegisterTexture(renderTarget);
                rw           = renderWidth;
                rh           = renderHeight;
            }
            DrawGL(renderWidth, renderHeight);
            //Display + Camera controls
            ImGui.ImageButton((IntPtr)rid, new Vector2(renderWidth, renderHeight),
                              Vector2.Zero, Vector2.One,
                              0,
                              Vector4.One, Vector4.One);
            if (ImGui.IsItemHovered(HoveredFlags.Default))
            {
                if (ImGui.IsMouseDragging(0, 1f))
                {
                    var delta = (Vector2)ImGui.GetMouseDragDelta(0, 1f);
                    rotation -= (delta / 64);
                    ImGui.ResetMouseDragDelta(0);
                }
                float wheel = ImGui.GetIO().MouseWheel;
                if (ImGui.GetIO().ShiftPressed)
                {
                    zoom -= wheel * 10;
                }
                else
                {
                    zoom -= wheel * 40;
                }
            }
            //Action Bar
            if (ImGui.Button("Actions"))
            {
                ImGui.OpenPopup("actions");
            }
            if (ImGui.BeginPopup("actions"))
            {
                if (ImGui.MenuItem("Open Node Library"))
                {
                }
                ImGui.EndPopup();
            }
            ImGui.SameLine();
            if (ImGui.Button("Reset"))
            {
                instance.Reset();
            }
            ImGui.SameLine();
            ImGui.Text(string.Format("T: {0:0.000}", instance.GlobalTime));
            //Node Hierachy Tab
            ImGui.EndChild();
            ImGui.NextColumn();
            ImGui.BeginChild("##nodesdisplay", false);
            if (selectedReference != null)
            {
                NodeOptions();
                ImGui.Separator();
            }
            ImGui.BeginChild("##nodescroll", false);
            NodeHierachy();
            ImGui.EndChild();
            ImGui.EndChild();

            return(open);
        }