Irrlicht IMGUI binding

Announce new projects or updates of Irrlicht Engine related tools, games, and applications.
Also check the Wiki
GrafZahl
Posts: 37
Joined: Mon Oct 20, 2014 6:24 pm

Irrlicht IMGUI binding

Post by GrafZahl »

Hello

Today I released an Irrlicht IMGUI binding on my github page: https://github.com/ZahlGraf/IrrIMGUI

Update: 30.9.2015 - The new release 0.2.0 is available :)

Image

IMGUI (the name directly means "immediate mode GUI") is a quite easy to use GUI system. It is ideal for creating very fast a small GUI in your project, without fighting with Themes, XML layouts and complex data structures. And this GUI has a lot of cool features, so inside the project it feels really like a professional high quality GUI. (Furthermore I like the modern minimalistic default style :-) ).
Look here for more details about IMGUI: https://github.com/ocornut/imgui

The IrrIMGUI library includes a render system for IMGUI elements for Irrlicht. The current project state (release 0.1.0) has a native OpenGL renderer that works well together with Irrlicht. However the goal for the next release is to use Irrlicht High Level Primitive drawing functions to have an universal renderer system that works together with almost all Irrlicht render drivers.
Furthermore this library has some helper functions and classes to easily pass the Irrlicht Keyboard and Mouse events to the GUI and to use Irrlicht images and textures inside the GUI.

You can embed the sources directly into your project or you can build a library (shared or static) out of it and link against it.
The build system uses CMake and I tested it on Visual C++, MinGW, Intel 16.0 and GCC (Linux) Compiler.

On the mainpage of the GitHub project you can also find pre-compiled binaries for Windows and Linux. There are also some example programs inside, that should show how to use IMGUI together with Irrlicht.

Do not hesitate to send me your feedback :-)

Best regards,
GrafZahl
Last edited by GrafZahl on Wed Sep 30, 2015 2:12 pm, edited 1 time in total.
Irrlicht related projects:
Looking for a cool and easy to use GUI? Try the IrrIMGUI bindings for IMGUI: https://github.com/ZahlGraf/IrrIMGUI
Try out my Irrlicht CMake build system: https://github.com/ZahlGraf/IrrlichtCMake
airc
Posts: 25
Joined: Wed Jan 08, 2014 8:17 am

Re: Irrlicht IMGUI binding

Post by airc »

this is great stuff , its better than irrlicht gui .
ocornut's imgui becoms so famous
GrafZahl
Posts: 37
Joined: Mon Oct 20, 2014 6:24 pm

Re: Irrlicht IMGUI binding

Post by GrafZahl »

The IMGUI is really great! It has a very modern look and feel, all the features worked for me out of the box (copy/past; resize and move windows; enter text, using tab for switching between input elements, scrolling and so on).
And furthermore it is so extremely easy to setup complex gui windows, I really enjoy to work with it.

So from my point of view Omar Cornut really deserves it, that his GUI becomes famous :)
Irrlicht related projects:
Looking for a cool and easy to use GUI? Try the IrrIMGUI bindings for IMGUI: https://github.com/ZahlGraf/IrrIMGUI
Try out my Irrlicht CMake build system: https://github.com/ZahlGraf/IrrlichtCMake
airc
Posts: 25
Joined: Wed Jan 08, 2014 8:17 am

Re: Irrlicht IMGUI binding

Post by airc »

and also its the fastest (in term of fps) gui library so far .
do you think making an editor for it would be easy ?
GrafZahl
Posts: 37
Joined: Mon Oct 20, 2014 6:24 pm

Re: Irrlicht IMGUI binding

Post by GrafZahl »

Basically having an editor is a little bit contrary to the immediate mode GUI concept. The key of easiness and performance is that you build up the GUI by calling Widgets functions inside the main-loop. Those functions directly fill up a draw buffer that is rendered within the same frame.
So you don't need to manage data structures with GUI hierarchies, callback functions and events. You just build up the GUI and GUI logic inside your code.

Of course that does not mean, that creating an editor is not possible at all, but the output of this editor must be C/C++ code to be compatible with the IMGUI interface.

However for complex projects with many contributors it is a big drawback to have the GUI Design and GUI Logic together at the same code. That's why Retained Mode GUI (RMGUI) Systems are so popular for big projects.
That are GUI systems like CEGUI, MyGUI, Noesisgui - almost every big GUI library.

However starting with IMGUI is perfect for the beginning of every project, because it is so easy to get a meaningful output at the screen. When the project gets bigger and bigger, you might need to change the GUI concept.
An idea would be to have another layer on top of IrrIMGUI and IMGUI, that is able manage and draw GUI elements out of XML files (a classical RMGUI system). Of course this would never be as fast as the direct IMGUI function calls, but at a certain level of project complexity you must sacrifice performance to keep the project maintainable.
The key of success for such a GUI library is, that you can easily start with classical IMGUI programming and switch at any point you want to a more RMGUI concept. The render engine behind this XML based GUI is still IMGUI, so the look and feel is still the same and the transition from IMGUI to RMGUI is very smooth.
And for those XML GUI files you can easily create a graphical editor :)

Maybe such a hybrid library based on IMGUI will be my next project. I don't know... first I have to concentrate on the 0.2 release of IrrIMGUI to get the Irrlicht High Level renderer running.

Best regards,
Graf Zahl
Irrlicht related projects:
Looking for a cool and easy to use GUI? Try the IrrIMGUI bindings for IMGUI: https://github.com/ZahlGraf/IrrIMGUI
Try out my Irrlicht CMake build system: https://github.com/ZahlGraf/IrrlichtCMake
airc
Posts: 25
Joined: Wed Jan 08, 2014 8:17 am

Re: Irrlicht IMGUI binding

Post by airc »

thanks for the clarification .
keep up the good work .


greeting
GrafZahl
Posts: 37
Joined: Mon Oct 20, 2014 6:24 pm

Re: Irrlicht IMGUI binding

Post by GrafZahl »

Today I released Version 0.2
Now you can use an Irrlicht High Level driver for drawing the GUI (do not compile with Native OpenGL driver option to use it!).
The new driver has reasonable performance, even if it is must use some workarounds, that are not good for performance.

I will check further if I can skip the one or the other workaround to be faster in future, but so far I could not see a big difference between native OpenGL and Irrlicht High Level driver. Nevertheless the Irrlicht High Level driver in DirectX9 mode was on my computer around 1000 FPS (!!) faster then the native OpenGL driver or in OpenGL mode.

The Irrlicht High Level driver supports OpenGL and DirectX9. DirectX8 has not been tested until now, but as far as all features available, it should work.
The Irrlicht software drivers do not work, since they cannot draw 2D triangle primitives :(

At the moment I do not have plans for the next release. First of all, the current release should be as stable as possible.
However today I got the idea to support Shaders for GUI related effects. What do you think about that idea? Are there any cool applications, where a GUI uses shaders?
Irrlicht related projects:
Looking for a cool and easy to use GUI? Try the IrrIMGUI bindings for IMGUI: https://github.com/ZahlGraf/IrrIMGUI
Try out my Irrlicht CMake build system: https://github.com/ZahlGraf/IrrlichtCMake
christianclavet
Posts: 1638
Joined: Mon Apr 30, 2007 3:24 am
Location: Montreal, CANADA
Contact:

Re: Irrlicht IMGUI binding

Post by christianclavet »

Hi, That's a nice project! You could use the shaders to have the GUI have refraction and cast shadow, or other FX.
GrafZahl
Posts: 37
Joined: Mon Oct 20, 2014 6:24 pm

Re: Irrlicht IMGUI binding

Post by GrafZahl »

Hi,

I tried to use shaders around a half your ago, but Irrlicht is disabling custom shaders (hardcoded) for 2D drawings, so it did not work without changing the irrlicht source a lot. :(

Maybe Irrlicht 1.9 or later versions will support this, It would be really cool... or maybe I will find time in future to investigate what needs to be changed in Irrlicht and create a patch for that.

Best regards,
GrafZahl
Irrlicht related projects:
Looking for a cool and easy to use GUI? Try the IrrIMGUI bindings for IMGUI: https://github.com/ZahlGraf/IrrIMGUI
Try out my Irrlicht CMake build system: https://github.com/ZahlGraf/IrrlichtCMake
bkeys
Posts: 42
Joined: Sat Feb 27, 2016 9:06 pm

Re: Irrlicht IMGUI binding

Post by bkeys »

My project was going to use irrchan, but we are going to drop it in favor of using your wrapper, keep up the good work!
- Brigham Keys, Esq.
bkeys
Posts: 42
Joined: Sat Feb 27, 2016 9:06 pm

Re: Irrlicht IMGUI binding

Post by bkeys »

GrafZahl wrote:Hello

Today I released an Irrlicht IMGUI binding on my github page: https://github.com/ZahlGraf/IrrIMGUI

Update: 30.9.2015 - The new release 0.2.0 is available :)

Image

IMGUI (the name directly means "immediate mode GUI") is a quite easy to use GUI system. It is ideal for creating very fast a small GUI in your project, without fighting with Themes, XML layouts and complex data structures. And this GUI has a lot of cool features, so inside the project it feels really like a professional high quality GUI. (Furthermore I like the modern minimalistic default style :-) ).
Look here for more details about IMGUI: https://github.com/ocornut/imgui

The IrrIMGUI library includes a render system for IMGUI elements for Irrlicht. The current project state (release 0.1.0) has a native OpenGL renderer that works well together with Irrlicht. However the goal for the next release is to use Irrlicht High Level Primitive drawing functions to have an universal renderer system that works together with almost all Irrlicht render drivers.
Furthermore this library has some helper functions and classes to easily pass the Irrlicht Keyboard and Mouse events to the GUI and to use Irrlicht images and textures inside the GUI.

You can embed the sources directly into your project or you can build a library (shared or static) out of it and link against it.
The build system uses CMake and I tested it on Visual C++, MinGW, Intel 16.0 and GCC (Linux) Compiler.

On the mainpage of the GitHub project you can also find pre-compiled binaries for Windows and Linux. There are also some example programs inside, that should show how to use IMGUI together with Irrlicht.

Do not hesitate to send me your feedback :-)

Best regards,
GrafZahl
Hey GrafZahl,
We are using this GUI in our game and modified the build system to be more dynamic and much better at finding Irrlicht, we also added IMGUI itself as a submodule for people to set up much easier, my comrade Nicolas (DeathsBreed) should be doing a pull request shortly to hopefully merge the improvements we made.
- Brigham Keys, Esq.
GrafZahl
Posts: 37
Joined: Mon Oct 20, 2014 6:24 pm

Re: Irrlicht IMGUI binding

Post by GrafZahl »

Hi bkeys,

that are good news :)
Improving the CMake script to find irrlicht automatically sounds like a good idea.

However having IMGUI as a direct submodule inside the IrrIMGUI repository is not perfect from my point of view. Since this could give licence issues (the licences of IMGUI are very mixed).
So I want to have just this empty dependency folder inside the IrrIMGUI repository. Setting up IMGUI is quite easy: Just copy the sources from the IMGUI repository into this directory. So this should not be a blocking point.

By the way, even if the readme of the repository state that it was only tested with IMGUI 1.46, I'm very sure it will work without any issues with the most recent IMGUI version. Some weeks ago I implemented a university project with Irrlicht and IMGUI and updated my local IMGUI version to 1.49 without having any issues with the IrrIMGUI wrapper. Just for your information, if you have not tested it so far.

In some weeks I will write some tough exams, so at the moment I cannot give much support here (for example looking at the pull request). But in August I will have more time and will update the Readme and look at the pull request from your team.
Thanks for the feedback.

P.S.: Maybe you can share some cool images from your project :-)
P.P.S.: And keep in mind, IrrIMGUI is just a simple wrapper. The real magic happens inside the IMGUI sources from Omar Cornut. So do not forget to tell him about your cool projects (he has a screenshot thread on his github page) and if you earn money with your project think about a donation to him. He really did an excellent work with IMGUI :-)
P.P.P.S.: And of course the most magic is happening in Irrlicht itself. It is really be best open source graphic engine for C++, so also the Irrlicht team deserves any support we programmers can give :)
Irrlicht related projects:
Looking for a cool and easy to use GUI? Try the IrrIMGUI bindings for IMGUI: https://github.com/ZahlGraf/IrrIMGUI
Try out my Irrlicht CMake build system: https://github.com/ZahlGraf/IrrlichtCMake
bkeys
Posts: 42
Joined: Sat Feb 27, 2016 9:06 pm

Re: Irrlicht IMGUI binding

Post by bkeys »

GrafZahl wrote: Improving the CMake script to find irrlicht automatically sounds like a good idea.
That sounds great! Nic made you the pull request earlier today, we are glad to hear you are open to our pull request!
GrafZahl wrote: However having IMGUI as a direct submodule inside the IrrIMGUI repository is not perfect from my point of view. Since this could give licence issues (the licences of IMGUI are very mixed).
So I want to have just this empty dependency folder inside the IrrIMGUI repository. Setting up IMGUI is quite easy: Just copy the sources from the IMGUI repository into this directory. So this should not be a blocking point.
We ended up leaving out the submodule part (however the rest of our changes are indeed there). But IMGUI seems to be licensed only under the MIT license according to their github page. But since we did not do this anyway it should not be an issue.
GrafZahl wrote: By the way, even if the readme of the repository state that it was only tested with IMGUI 1.46, I'm very sure it will work without any issues with the most recent IMGUI version.
Yes our project uses the most recent version of IMGUI and we are not experiencing any issues, if any do come up we will try to fix any bugs and make another pull request :)
GrafZahl wrote: In some weeks I will write some tough exams, so at the moment I cannot give much support here (for example looking at the pull request). But in August I will have more time and will update the Readme and look at the pull request from your team.
Thanks for the feedback.
Thank you for writing IrrIMGUI! We have been looking for a decent GUI framework that looked good and did not kill performance (CEGUI is massive and does not work well with Irrlicht), this works great with no issues, we were going to use Tecan's integration of guichan and Irrlicht (which I also posted about) but this is a much better solution for what we were doing, so thank you for your contribution.
GrafZahl wrote: P.S.: Maybe you can share some cool images from your project :-)
Sure! Here is a screenshot from the current build, we are using Oliver's Math Class as our first map in our game (notice your GUI wrapper at work), thanks to wrappers like yours and other libraries our project is looking to be pretty amazing and with not that much C++ code written for what we are getting 8)
Image
GrafZahl wrote: P.P.S.: And keep in mind, IrrIMGUI is just a simple wrapper. The real magic happens inside the IMGUI sources from Omar Cornut. So do not forget to tell him about your cool projects (he has a screenshot thread on his github page) and if you earn money with your project think about a donation to him. He really did an excellent work with IMGUI :-)
P.P.P.S.: And of course the most magic is happening in Irrlicht itself. It is really be best open source graphic engine for C++, so also the Irrlicht team deserves any support we programmers can give :)
It is just a simple wrapper, but GUI engines are not that useful to us if we cannot use them with Irrlicht so thank you for giving us this option :wink: the game is under the GNU GPL v3 so we are giving the game away for free for the most part, and we also credit anyone who contributes and we will mention everyone in the credits of our game.
- Brigham Keys, Esq.
bkeys
Posts: 42
Joined: Sat Feb 27, 2016 9:06 pm

Re: Irrlicht IMGUI binding

Post by bkeys »

Thank you GrafZhal for your work! Here is an update for our usage of IrrImGui, we use it for our main menu and plan on using it as a full replacement for the Irrlicht GUI in our project. You really saved our bacon with this project (we were grasping at straws for a GUI library that would work with Irrlicht). We also use your Irrlicht CMake build for our project, and in our windows build. Here is a screenshot of our game:
Image
Here is our project's repository:
https://gitlab.com/CollectiveTyranny/DMUX

I tried to make the main menu as generic as possible so that other projects using your wrapper can benefit, the main menu is under the GPL v3 and can be found here:
https://gitlab.com/bkeys/IrrImMenu
It is not complete, but a lot of the work is already done since the main menu is not the most interesting thing to create.
- Brigham Keys, Esq.
GrafZahl
Posts: 37
Joined: Mon Oct 20, 2014 6:24 pm

Re: Irrlicht IMGUI binding

Post by GrafZahl »

Hey, that looks really cool! It looks like a class-room where a car race it taking place in the night :)

I laughed a lot about the sentence "failure is not an option"... man this reminds me on my school time ;)

I'm really happy that the IrrIMGUI bindings and the CMake project helps you. At the moment I'm at vacation, but when I came back home, I will also look at your pull-request. Many thanks for that.

Best regards
Irrlicht related projects:
Looking for a cool and easy to use GUI? Try the IrrIMGUI bindings for IMGUI: https://github.com/ZahlGraf/IrrIMGUI
Try out my Irrlicht CMake build system: https://github.com/ZahlGraf/IrrlichtCMake
Post Reply