Beispiel #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);
 }
Beispiel #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");
                }
            }
        }
Beispiel #3
0
 protected override void Load()
 {
     Title     = "LancerEdit";
     guiHelper = new ImGuiHelper(this);
     Audio     = new AudioManager(this);
     FileDialog.RegisterParent(this);
 }
        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;
        }
Beispiel #5
0
        protected override void Load()
        {
            Title     = "LancerEdit";
            guiHelper = new ImGuiHelper(this);
            Audio     = new AudioManager(this);
            FileDialog.RegisterParent(this);
            Viewport = new ViewportManager(RenderState);
            var texturefilters = new List <string>(defaultFilters);

            if (RenderState.MaxAnisotropy > 0)
            {
                anisotropyLevels = RenderState.GetAnisotropyLevels();
                foreach (var lvl in anisotropyLevels)
                {
                    texturefilters.Add(string.Format("Anisotropic {0}x", lvl));
                }
            }
            filters     = texturefilters.ToArray();
            Resources   = new ResourceManager(this);
            Commands    = new CommandBuffer();
            Billboards  = new Billboards();
            Polyline    = new PolylineRender(Commands);
            DebugRender = new PhysicsDebugRenderer();
            Viewport.Push(0, 0, 800, 600);
        }
Beispiel #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();
        }
Beispiel #7
0
 public TextureViewer(string title, Texture2D tex, bool disposeTex = true)
 {
     this.tex = tex;
     this.tid = ImGuiHelper.RegisterTexture(tex);
     Title    = title;
     dispose  = disposeTex;
 }
Beispiel #8
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");
                    }
                }
            }
        }
Beispiel #9
0
 public override void Dispose()
 {
     if (renderTarget != null)
     {
         ImGuiHelper.DeregisterTexture(renderTarget);
         renderTarget.Dispose();
     }
 }
Beispiel #10
0
 public void Dispose()
 {
     if (RenderTarget != null)
     {
         ImGuiHelper.DeregisterTexture(RenderTarget.Texture);
         RenderTarget.Dispose();
     }
 }
Beispiel #11
0
 public override void Dispose()
 {
     if (dispose)
     {
         tex.Dispose();
     }
     ImGuiHelper.DeregisterTexture(tex);
 }
Beispiel #12
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;
 }
Beispiel #13
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();
        }
Beispiel #14
0
 protected override void Load()
 {
     Title     = "LancerEdit";
     guiHelper = new ImGuiHelper(this);
     Audio     = new AudioManager(this);
     FileDialog.RegisterParent(this);
     Viewport  = new ViewportManager(RenderState);
     Resources = new ResourceManager(this);
     Viewport.Push(0, 0, 800, 600);
 }
        public OptionsWindow(MainWindow win)
        {
            config    = win.Config;
            rstate    = win.RenderState;
            guiHelper = win.guiHelper;
            vps       = win.Viewport;

            var texturefilters = new List <string>(defaultFilters);

            if (win.RenderState.MaxAnisotropy > 0)
            {
                anisotropyLevels = win.RenderState.GetAnisotropyLevels();
                foreach (var lvl in anisotropyLevels)
                {
                    texturefilters.Add(string.Format("Anisotropic {0}x", lvl));
                }
            }
            var msaa = new List <int> {
                0
            };
            int a = 2;

            while (a <= win.RenderState.MaxSamples)
            {
                msaa.Add(a);
                a *= 2;
            }
            msaaLevels = msaa.ToArray();
            switch (config.MSAA)
            {
            case 2:
                cMsaa = 1;
                break;

            case 4:
                cMsaa = 2;
                break;

            case 8:
                cMsaa = 3;
                break;

            case 16:
                cMsaa = 4;
                break;

            case 32:
                cMsaa = 5;
                break;
            }
            filters = texturefilters.ToArray();
            cFilter = config.TextureFilter;
            SetTexFilter();
        }
        public static bool GradientButton(string id, Color4 colA, Color4 colB, Vector2 size, ViewportManager vps, bool gradient)
        {
            if (!gradient)
            {
                return(ImGui.ColorButton(id, colA, ImGuiColorEditFlags.NoAlpha, size));
            }
            ImGui.PushID(id);
            var img    = ImGuiHelper.RenderGradient(vps, colA, colB);
            var retval = ImGui.ImageButton((IntPtr)img, size, new Vector2(0, 1), new Vector2(0, 0), 0);

            ImGui.PopID();
            return(retval);
        }
Beispiel #17
0
 protected override void Load()
 {
     Title     = "LancerEdit";
     guiHelper = new ImGuiHelper(this);
     Audio     = new AudioManager(this);
     FileDialog.RegisterParent(this);
     Viewport    = new ViewportManager(RenderState);
     Resources   = new ResourceManager(this);
     Commands    = new CommandBuffer();
     Billboards  = new Billboards();
     Polyline    = new PolylineRender(Commands);
     DebugRender = new PhysicsDebugRenderer();
     Viewport.Push(0, 0, 800, 600);
 }
Beispiel #18
0
        public void End(bool view = true)
        {
            rstate.PopViewport();
            rstate.RenderTarget = null;
            if (mw.Config.MSAA != 0)
            {
                msaa.BlitToRenderTarget(RenderTarget);
            }
            rstate.ClearColor   = cc;
            rstate.DepthEnabled = false;
            rstate.BlendMode    = BlendMode.Normal;
            rstate.Cull         = false;
            //Viewport Control
            if (view)
            {
                ImGuiHelper.DisableAlpha();
                ImGui.Dummy(Vector2.One);
                ImGui.SameLine();
                ImGui.ImageButton((IntPtr)rid, new Vector2(rw, rh),
                                  new Vector2(0, 1), new Vector2(1, 0),
                                  0,
                                  Color4.Black, Color4.White);
                ImGuiHelper.EnableAlpha();
                if (Mode == CameraModes.Cockpit)
                {
                    ModelRotation = Vector2.Zero;
                }
                if (Mode == CameraModes.Arcball)
                {
                    ArcballUpdate();
                }
                if (ImGui.IsItemHovered(ImGuiHoveredFlags.None))
                {
                    switch (Mode)
                    {
                    case CameraModes.Walkthrough:
                        WalkthroughControls();
                        break;

                    case CameraModes.Starsphere:
                        StarsphereControls();
                        break;

                    case CameraModes.Arcball:
                        ArcballControls();
                        break;
                    }
                }
            }
        }
Beispiel #19
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])
                    });
                }
            }
        }
Beispiel #20
0
        protected override void Load()
        {
            Title     = "LancerEdit";
            guiHelper = new ImGuiHelper(this);
            Audio     = new AudioManager(this);
            FileDialog.RegisterParent(this);
            Viewport = new ViewportManager(RenderState);
            var texturefilters = new List <string>(defaultFilters);

            if (RenderState.MaxAnisotropy > 0)
            {
                anisotropyLevels = RenderState.GetAnisotropyLevels();
                foreach (var lvl in anisotropyLevels)
                {
                    texturefilters.Add(string.Format("Anisotropic {0}x", lvl));
                }
            }
            filters     = texturefilters.ToArray();
            Resources   = new ResourceManager(this);
            Commands    = new CommandBuffer();
            Billboards  = new Billboards();
            Polyline    = new PolylineRender(Commands);
            DebugRender = new PhysicsDebugRenderer();
            Viewport.Push(0, 0, 800, 600);
            Keyboard.KeyDown += Keyboard_KeyDown;

            //TODO: Icon-setting code very messy
            int w, h, c;
            var stream = typeof(MainWindow).Assembly.GetManifestResourceStream("LancerEdit.reactor_64.png");
            var bytes  = new byte[stream.Length];

            stream.Read(bytes, 0, (int)stream.Length);
            StbSharp.Stb.stbi_set_flip_vertically_on_load(0);
            var img = StbSharp.Stb.stbi_load_from_memory(bytes, out w, out h, out c, StbSharp.Stb.STBI_rgb_alpha);

            StbSharp.Stb.stbi_set_flip_vertically_on_load(1);
            SetWindowIcon(w, h, img);

            //Open passed in files!
            if (InitOpenFile != null)
            {
                foreach (var f in InitOpenFile)
                {
                    OpenFile(f);
                }
            }
        }
        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;
                }
            }
        }
        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));
        }
Beispiel #23
0
        protected override void Load()
        {
            Title     = "LancerEdit";
            guiHelper = new ImGuiHelper(this);
            guiHelper.PauseWhenUnfocused = Config.PauseWhenUnfocused;
            Audio = new AudioManager(this);
            FileDialog.RegisterParent(this);
            Viewport = new ViewportManager(RenderState);
            InitOptions();
            Resources   = new GameResourceManager(this);
            Commands    = new CommandBuffer();
            Billboards  = new Billboards();
            Polyline    = new PolylineRender(Commands);
            DebugRender = new PhysicsDebugRenderer();
            Viewport.Push(0, 0, 800, 600);
            Keyboard.KeyDown += Keyboard_KeyDown;

            //TODO: Icon-setting code very messy
            int w, h, c;
            var stream = typeof(MainWindow).Assembly.GetManifestResourceStream("LancerEdit.reactor_64.png");
            var bytes  = new byte[stream.Length];

            stream.Read(bytes, 0, (int)stream.Length);
            StbSharp.Stb.stbi_set_flip_vertically_on_load(0);
            var img = StbSharp.Stb.stbi_load_from_memory(bytes, out w, out h, out c, StbSharp.Stb.STBI_rgb_alpha);

            StbSharp.Stb.stbi_set_flip_vertically_on_load(1);
            SetWindowIcon(w, h, img);

            //Open passed in files!
            if (InitOpenFile != null)
            {
                foreach (var f in InitOpenFile)
                {
                    OpenFile(f);
                }
            }

            Renderer2D = new Renderer2D(RenderState);
            RichText   = Renderer2D.CreateRichTextEngine();
            Services.Add(Renderer2D);
            Fonts = new FontManager(this);
            Fonts.ConstructDefaultFonts();
            Services.Add(Fonts);
        }
Beispiel #24
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);
 }
        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)
        }
Beispiel #26
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();
 }
Beispiel #27
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);
        }
Beispiel #28
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();
                }
            }
        }
Beispiel #29
0
 public bool Draw()
 {
     ImGui.SetNextWindowSize(new Vector2(500, 400), ImGuiCond.FirstUseEver);
     if (ImGui.Begin($"Script##{unique}", ref isOpen))
     {
         if (doUpdate)
         {
             ImGuiHelper.AnimatingElement();          //Stops sleeping when running task on background thread
         }
         ImGui.Text(script.Info.Name);
         ImGui.Separator();
         if (running)
         {
             if (doUpdate)
             {
                 string text = "Running.";
                 var    t    = main.TotalTime - Math.Truncate(main.TotalTime);
                 if (t > 0.66)
                 {
                     text += "..";
                 }
                 else if (t > 0.33)
                 {
                     text += ".";
                 }
                 ImGui.Text(text);
             }
             else
             {
                 ImGui.Text("Finished");
             }
             ImGui.BeginChild($"##SCRIPTlog{unique}");
             ImGui.PushFont(ImGuiHelper.SystemMonospace);
             foreach (var line in lines)
             {
                 ImGui.TextWrapped(line);
             }
             if (lines.Count != lastCount && ImGui.GetScrollY() >= ImGui.GetScrollMaxY())
             {
                 ImGui.SetScrollHereY(1.0f);
             }
             lastCount = lines.Count;
             ImGui.PopFont();
             ImGui.EndChild();
         }
         else
         {
             for (int i = 0; i < arguments.Count; i++)
             {
                 arguments[i].Draw(i);
             }
             ImGui.Separator();
             if (ImGui.Button("Run"))
             {
                 Invoke();
             }
         }
         ImGui.End();
     }
     return(isOpen);
 }