Open ocornut opened 1 year ago
I posted the work of ImGui v1.88 in Google play, made on pure NDK without Java. I was wondering if Google would only skip the NDK, and it worked! The application is aimed at arm64-v8a architecture processors, but it also works fine on armeabi-v7a! I think I'll share the code and instructions at some time. https://play.google.com/store/apps/details?id=com.imgui.app
I posted the work of ImGui v1.88 in Google play, made on pure NDK without Java. I was wondering if Google would only skip the NDK, and it worked! The application is aimed at arm64-v8a architecture processors, but it also works fine on armeabi-v7a! I think I'll share the code and instructions at some time. https://play.google.com/store/apps/details?id=com.imgui.app
Oh man, it would be awesome if you could share the code, because google has done everything to make it difficult to adapt the code to android.
I know this is not much but this really helped me a lot so it might as well help someone here ^^
Published it here.
UPDATE: I exposed some components to Lua and now you can actually use it in scripts
managed to get ImGui running inside of Sonic Robo Blast 2 and used it to display some performance stats. So now we have ImGui running on the Doom Engine in some form.
that's pretty much it right now but I plan to use this setup heavily for all sorts of things. Will probably post some more screenshots when I have more things setup but I thought I'd share it anyways as it's pretty neat.
WIP open source layer-based compositor with a focus on bitmap editing for 2D motion design work, basically a combination of After Effects and Photoshop. ImGui's paradigm has been invaluable to my learning journey-- gotta thank Omar and all the contributors.
oh also I don't think I've shared this here before but I'm also helping out with the development of Chira Engine which also uses ImGui! (apologies for posting so soon after my last one I wanted to share this one too before I forgot)
NAP Framework by https://nap-labs.tech/ https://www.napframework.com
Not mine, but I just found that superb audio GUI.
Sorry if not, but I think that it is ImGui, I am not 100% sure... there are many parts/apps:
https://sol-hsa.itch.io/sassy#download
https://kx.studio/News.php?page
Leave it to me to feature creep the heck out of what should be a simple thing!
I've added a whole heap of customization options to imgui_toggle
, A quick preview:
As usual, source is here: :octocat: cmdwtf/imgui_toggle (0BSD licensed)
Found in the wild, Portal with RTX features a familiar face:
Not mine, but I just found that superb audio GUI. Sorry if not, but I think that it is ImGui, I am not 100% sure... there are many parts/apps:
https://sol-hsa.itch.io/sassy#download https://kx.studio/News.php?page
Aether (The reverb plugin shown in the screenshot) doesn't use ImGui for its GUI, but the DISTRHO Ildaeil mini-plugin host uses it for controls.
ImGui File Dialogs - CLI and Client Library by Samuel Venable.
Based on ImFileDialog by dfranx, with many bugs/crashes fixed and overall improvements. The 'Quick Access' sidebar actually remembers what favorites were previously saved to it from previous runs of your application now, by saving the settings to a text file in a hidden configuration subfolder of your home folder. Allows for full localization among many other good things you'll find useful. Most of the dialog is customizable via environment variables. Uses system icon theme.
This tool makes gathering sprite images from 3D models significantly easier, allowing you to get your vision into GameMaker faster. This is the first version of the tool and the start of our new foray into the third dimension.
Last time I posted a picture of Termi (#5243) Termi didn't have commands in .DLL or .so file NOR GUI models. GUI models today in third stable version are mostly just JSON entry but commands are fully finished with support of loading any command built by anyone using any programming language that can be compiled to .DLL file or .so file and can call functions in .DLL or .so files
Merry Christmas btw to entire Dear ImGui team and everyone else
RE Edit, a free and open source WYSIWYG editor for the UI of a Rack Extension
Here is a preview of what the user interface of my application looks like. It uses an OpenGL backend, and C++. Don't get distracted by the weird descriptions on the individual targets, I am still parsing them wrong.
Each target is selectable, and the following modal is displayed when a target is selected:
And yes, there is also a dark mode:
The recently release tool SpriteMancer by CodeManu makes use of our favorite library, complete with an @ocornut shoutout!
At job, I needed a tool for display Numerical Signal based logs to graph curve, for easy analyze.
The tool is called LogToGraph
So generic, since the parsing of a log file is done by a lua script. so easy modifable by a user.
In more than Dear ImGui, Thanks to ImPlot for his incredible graph possibilites
Quick demo : (here with a profiler log of my soft NoodlesPlate of a MandelBulb shader)
My practical part of my thesis called "Demonstration of Signal digitization". It uses dear ImGui and ImPlot. It has a Web assembly version that is hosted on GitHub Pages
https://github.com/Jacckii/SignalDigitization
(First of all, sorry for unintentionally flooding the gallery with links when I first informed third party libraries authors, as you can see on top of this message)
I'd like to introduce Dear ImGui Bundle, which is a bundle for Dear ImGui, including many libraries from its ecosystem. It enables to easily create ImGui applications in C++ and Python, under Windows, macOS, Linux, and emscripten (and also iOS) It is aimed at application developers, researchers, and beginner developers who want to quickly get started.
ImGui, ImPlot, Hello ImGui, ImGuizmo, ImGuiColorTextEdit, imgui-node-editor, imgui-knobs, ImFileDialog, portable-file-dialogs, imgui_md, imspinner, imgui_toggle, ImmVision, imgui_tex_inspect, imgui-command-palette
Some highlights with screenshots below:
Integrated documentation
Demo code viewer
Lots of widgets
ImPlot in jupyter notebook!
This list of screenshots is very partial, and there are lots of other features provided by the included libraries. Thanks to their authors!
MaterialX graph editor is using imgui
https://twitter.com/SheriffStone/status/1619095627287396357?t=tenVRtU4cM4DNpk1FeLj2g&s=19
preview: https://imgur.com/InEs1WV
No-code UI creating software for ImGui. Create an interface for your application with the convenience of Figma and the functionality of Photoshop.
Blurry effect example for imgui.. I wanted to share one as it's not really a clear example, thanks.
From a little Android puzzle game I wrote. Was a bit tricky to get the touch events to work properly (mouse up and then moving away - to get rid of the hover effects - has to be done in two consecutive frames) at first but now it all works really well - Dear Imgui is an absolute pleasure to work with! :-)
https://github.com/RuiVarela/Senos
Senos is sound exploration tool from a developer point of view. It is very lightweight, can be used as a toy or a minimal song composer.
Play Setup | Instruments | Sequencer | Chainer |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
https://github.com/qiutang98/flower
I love imgui, just need to write some simple code then i can get a beautiful professional ui layout. With imgui‘s help, i can start to write my custom engine what i want to do a long time ago.
I came across this which appears to be some well customised imgui :
I guess the timeline is something made with openFrameworks.
https://vimeo.com/426350419 // https://localprojects.com/work/corporate-experience/patterns-of-life/
A toy project I created a while ago to learn ImGui. Very convenient lib, and the customization is also very easy.
A color-gradient widget for Dear ImGui
It is an essential part of the generative-art software I am currently writing!
Spotted on the web
Rat GUI
The most convenient simulation tool for magnet engineers
https://rat-gui.ch/index.html
(also in licences for Final Fantasy X/X-2 HD remake (but no screen) https://finalfantasyxhd.square-enix-games.com/de-de/license)
I work with their amazing tools and the interface framework looks familiar ;) https://aaronia.com/software/rtsa-suite/
Structural Mechanics software ObjectiveFrame (https://github.com/jonaslindemann/objectiveframe):
Gardenscapes also uses ImGui, like Homescapes!
Shown here is a screenshot of, I think, an animation manager?
Video link: https://youtu.be/qgGaXvZLPYw?t=11
OpenSim Creator
https://github.com/ComputationalBiomechanicsLab/opensim-creator
Fun thing, Quake 3 re-release using a Dear ImGui underlying logic for in-game menus:
Having worked on a reasonably big ImGui application over the last two years, one of my biggest gripes has always been popups. While I generally love how quick and easy it is to display a popup, I often had the issue that I am somewhat deep in the call stack and want to show a popup. Usually just a quick message box to let the user confirm an action. While waiting for the confirmation I have to somehow retain some temporary data over several frames so I can continue my work, once the user closes the message box. One could argue that I should not open a popup from somewhere deep inside the callstack anyways but... well theory and practice and in practice it often is just a big nuisance and overcomplicates the code by a lot. Additionally the BeginPopup and OpenPopup functions must be called in the same ID Stack "Layer" which makes things even harder.
Long story short, I needed blocking popups. So blocking popups I implemented. Unfortunately the software I'm working on is proprietary so I can not show any code or get into too much detail. I mainly want to show that if you REALLY want/need blocking popups, like I did, then this could confirm to you that it is absolutely possible. Even if not that easily.
First of all let's see what it looks like.
A simple message box:
A little more 'complex' popup:
Usage in code looks something like this:
Popup::BlockingPopup popup("My Popup", nullptr /*Parent window*/, true /*Resizable*/);
popup.Show(1000, 700);
while (popup.Begin()) {
//My content
Popup::Buttons disable = Popup::Buttons::NONE;
switch (Popup::DrawButtons(Popup::Buttons::OK | Popup::Buttons::CANCEL, Popup::ButtonAlign::RIGHT, disable))
{
case Popup::Buttons::OK:
{
// Stuff
popup.Close();
break;
}
case Popup::Buttons::CANCEL:
{
popup.Close();
break;
}
default:
break;
}
if (ImGui::IsKeyPressed(ImGuiKey_Escape))
popup.Close();
popup.End();
}
By writing a wrapper function, classic message boxes can be shown like so:
Popup::BlockingMessageBox("Title", "Content", Popup::Buttons::YES | Popup::Buttons::NO, nullptr /*Parent window*/) == Popup::Buttons::YES
The way this all works is as follows: First of all we wrote a custom ImGui Backend... I know this is kind of a heavy hitter. Most people do not do this since the example backends provided are usually good enough. However for our application we are using a custom platform layer and renderer and our ImGui backend had to work with those either way (long before the Popup requirement even came up).
Why is a custom backend important? Because when showing a popup we create a whole new platform window as well as a whole new ImGui instance. That means ImGuiContext AND Backend. Unfortunately the example backends are not really made to be instanced multiple times in one application. Our backend being a class makes this relatively easy. Although there is some global state in our application so we can reuse parts of the existing backend instance (e.g. already loaded fonts or our renderer) without having to pass them around everywhere we might need a message box.
After creating a new instance, we open the window and enter a new loop. So a loop inside the application's actual main loop. That's how we achieve the 'blocking' part. Inside this loop we can then call ImGui functions as usual.
This method sure has it's limitations and it has quite the overhead, considering that we have to create a new window, ImGuiContext and backend every time. I'm also not that big of a fan of the global state we are using. Then again, the ImGuiContext is also 'just' global state. A little more sophisticated implementation would maybe pool windows/backends for reuse. Currently we don't do that and it saddens me that creating a new window under Windows is a lot slower than the lightning fast ImGui popups but maybe that's just nitpicking. We also can't do the 'greyed out' background for modal popups since that would require tinting the main applications window. That change would only show up in the next frame however and the whole idea here is that we do NOT want to figure out how to keep our state until the next frame.
It might not be the easiest thing to implement but maybe the knowledge alone that it is indeed possible and works pretty well motivates some folks to try the same and maybe even find a way to get similar functionality into 'vanilla' ImGui. Without a big example backend rework I currently do not really see a way.
There’s a lot to unpack in your message but I have no idea why you are posting this in a Gallery thread instead of opening a new thread. It seems completely off-topic. Would be good if you moved it elsewhere and deleted message here (then i’ll delete mine). Also make sure you know about multi-viewports and modal windows.
Apologies for the tone of my previous post: to clarify it seemed unclear if your message was to show/share your work (which is the purpose of this thread) or to open a discussion about various issues (which are valid but best posted elsewhere). I do realize that even thought it opens up a few questions it was aimed to be the earlier. My bad. The point if we cannot have those Gallery threads include lengthy back and fort replies.
Additionally the BeginPopup and OpenPopup functions must be called in the same ID Stack "Layer" which makes things even harder.
Indeed it's been a common issue that we aim to solve with using id paths (that are currently used in test engine but NOT in imgui functions yet: see the doc on test engine side to grasp the idea). Note that using GetID()
you can compute a unique popup id then use BeginPopupEx(id, ...
and your setup will work regardless of ID stack location.
I needed blocking popups. So blocking popups I implemented.
This was ambiguous on first read but I understand you want blocking in the sense of "parent-app-blocking". I am glad you got this working, thought I can't help but think that reworking your main application code and flow to facilitate storing popup-transient data would be nicer and simpler down the line.
That means ImGuiContext AND Backend. Unfortunately the example backends are not really made to be instanced multiple times in one application.
We did rework the backend following #2004 to allow them to work with multiple contexts. I think there are known issues if running in parallel but it doesn't seem the case here? (and was already the use case of #2004). Can you clarify what you think are preventing backends to do that?
Found one in the wild https://mastodon.gamedev.place/@maxim/109978196009122743
Looks like valve is using it for the steam deck Dev kit.
https://mastodon.social/@rustym
"Dear ImGui has been just instrumental to creating Astro Duel 2. We’ve built debug menus, inspectors, editors and production tools all atop this incredible open source framework. What an industry gem!"
"Upcoming Slitterhead from Bokeh Game Studio (new studio by Keiichiro Toyama, creator of Silent Hill) also seems to use it, https://youtu.be/zM3M3jTEAZM?t=136 2:16 in the video"
It looks like Counter-Strike 2 (announced at the time of commenting) is using imgui! Video here.
Thank you @CosminPerRam. I took the liberty to amend your post (it shows as edited) with a slightly different frame taken from the video where more of the text is in focus.
I wanted to try out Dear ImGui, so I wrote a thermal image processing software around it. I really loved every minute, thanks!
the repository is here: https://github.com/rodan/thpp
the rendering loop is event-driven (without poking ImGui's code) - based on great work done in #2749
Usage in Halo Infinite From slides "Thinking Like Players: How 'Halo Infinite's' Multiplayer Bots Make Decisions" at GDC 2022 https://www.gdcvault.com/play/1027689/Thinking-Like-Players-How-Halo
In-house AI system, with editor and debugger. Architectured on combination of behaviour trees and hierarhical state machines.
Uses node editor by thedmd, written in java using imgui-java by Spair
A little 2d sandbox to play with genetic AI training with several fancy features (dynamic light, pseudo 3d materials, game engine-like editor) -- code here
A video progress bar
This is Part 16, I am splitting issues to reduce loading times and avoid github collapsing messages.
Browse all threads and find latest one to post to using the gallery label.
Also see: Software using dear imgui (you can help complete the list!)
You can post your screenshots here!