Ejemplo n.º 1
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);
 }
Ejemplo n.º 2
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;
        }
Ejemplo n.º 3
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();
        }
Ejemplo n.º 4
0
 public override void Dispose()
 {
     if (dispose)
     {
         tex.Dispose();
     }
     ImGuiHelper.DeregisterTexture(tex);
 }
Ejemplo n.º 5
0
 public void Dispose()
 {
     if (RenderTarget != null)
     {
         ImGuiHelper.DeregisterTexture(RenderTarget.Texture);
         RenderTarget.Dispose();
     }
 }
Ejemplo n.º 6
0
 public override void Dispose()
 {
     if (renderTarget != null)
     {
         ImGuiHelper.DeregisterTexture(renderTarget);
         renderTarget.Dispose();
     }
 }
Ejemplo n.º 7
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();
        }
Ejemplo n.º 8
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;
                }
            }
        }
Ejemplo n.º 9
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));
        }
Ejemplo n.º 10
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);
 }
Ejemplo n.º 11
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)
        }
Ejemplo n.º 12
0
        void TexImportDialog(PopupData data)
        {
            if (teximportprev == null)
            { //processing
                ImGui.Text("Processing...");
                if (!texImportWaiting)
                {
                    if (texImportChildren != null)
                    {
                        selectedNode.Data = null;
                        foreach (var c in texImportChildren)
                        {
                            c.Parent = selectedNode;
                        }
                        selectedNode.Children = texImportChildren;
                    }
                    else
                    {
                        selectedNode.Children = null;
                        selectedNode.Data     = texImportData;
                    }
                    texImportData     = null;
                    texImportChildren = null;
                    ImGui.CloseCurrentPopup();
                }
            }
            else
            {
                ImGui.Image((IntPtr)teximportid, new Vector2(64, 64),
                            new Vector2(0, 1), new Vector2(1, 0), Vector4.One, Vector4.Zero);
                ImGui.Text(string.Format("Dimensions: {0}x{1}", teximportprev.Width, teximportprev.Height));
                ImGui.Combo("Format", ref compressOption, texOptions);
                ImGui.Combo("Mipmaps", ref mipmapOption, mipmapOptions);
                ImGui.Checkbox("High Quality (slow)", ref compressSlow);
                if (ImGui.Button("Import"))
                {
                    ImGuiHelper.DeregisterTexture(teximportprev);
                    teximportprev.Dispose();
                    teximportprev    = null;
                    texImportWaiting = true;
                    new System.Threading.Thread(() =>
                    {
                        var format = DDSFormat.Uncompressed;
                        switch (compressOption)
                        {
                        case 1:
                            format = DDSFormat.DXT1;
                            break;

                        case 2:
                            format = DDSFormat.DXT1a;
                            break;

                        case 3:
                            format = DDSFormat.DXT3;
                            break;

                        case 4:
                            format = DDSFormat.DXT5;
                            break;
                        }
                        var mipm = MipmapMethod.None;
                        switch (mipmapOption)
                        {
                        case 1:
                            mipm = MipmapMethod.Box;
                            break;

                        case 2:
                            mipm = MipmapMethod.Bicubic;
                            break;

                        case 3:
                            mipm = MipmapMethod.Bilinear;
                            break;

                        case 4:
                            mipm = MipmapMethod.Bspline;
                            break;

                        case 5:
                            mipm = MipmapMethod.CatmullRom;
                            break;

                        case 6:
                            mipm = MipmapMethod.Lanczos3;
                            break;
                        }
                        if (mipm == MipmapMethod.None && format == DDSFormat.Uncompressed)
                        {
                            texImportData = TextureImport.TGANoMipmap(teximportpath);
                        }
                        else if (format == DDSFormat.Uncompressed)
                        {
                            texImportChildren = TextureImport.TGAMipmaps(teximportpath, mipm);
                        }
                        else
                        {
                            texImportData = TextureImport.CreateDDS(teximportpath, format, mipm, compressSlow);
                        }
                        texImportWaiting = false;
                    }).Start();
                }
                ImGui.SameLine();
                if (ImGui.Button("Cancel"))
                {
                    ImGuiHelper.DeregisterTexture(teximportprev);
                    teximportprev.Dispose();
                    teximportprev = null;
                    ImGui.CloseCurrentPopup();
                }
            }
        }
Ejemplo n.º 13
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);
        }