public TextureViewer(string title, Texture2D tex, bool disposeTex = true) { this.tex = tex; this.tid = ImGuiHelper.RegisterTexture(tex); Title = title; dispose = disposeTex; }
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"); } } }
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); }
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"); } } } }
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; }
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(); }
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; }
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(); }
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]) }); } } }
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)); }
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) }
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(); }
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); }