1 – Release Highlights
As usual, since it’s my main development platform, the new GeeXLab is available first on Windows. GeeXLab for Linux, macOS and Raspberry Pi will be updated later.
The main feature of GeeXLab 0.17 is the support of ImGui (also caleed Dear ImGui by its author). Now that I played a bit with this library, I can tell that ImGui is a nice tool for coding user interfaces in OpenGL, Vulkan and Direct3D. ImGui is an immediate mode library: each and every frame, you have to build all ImGui windows and widgets. Once you understand it, you can really use ImGui functions. The immediate mode allows you to make the displaying of ImGui widgets really dynamic: you can change the position, size, content of every widget at any time. You can add a new widget or remove an existing widget at any moment.
What’s more, ImGui is renderer agnostic, which means there is no dependency with OpenGL or Vulkan or D3D. There is only one callback to implement with your favorite 3D API. The main goal of this callback is to render ImGui vertex buffers. That’s all. This is just for the sake of theory, because with GeeXLab you don’t need to care about the details.
In GeeXLab 0.17, ImGui support has been added to OpenGL (2.1 and 3.2+) and Vulkan renderers. Direct3D 12 support will be added later. ImGui functions are available via a new lib in Lua and Python: gh_imgui.
ImGui has a lot of funtions to draw every kind of widgets. In this first version, I only coded the most useful for GeeXLab demos:
– texts and colored texts
– progress bars
– sliders (1D and 4D)
I will add other ImGui functions gradually.
You will find ImGui demos in the code sample pack in the following folders:
ImGui is not the first widget tool in GeeXLab. AntTweakBar and NanoVG are also available in GeeXLab.
I also added in GeeXLab 0.17 some functions to get CPU usage (gh_utils.cpu_usage_xxxx()). I had on my SSD a piece of code for that purpose since months and I decided to add it in GeeXLab. The CPU usage is currently limited on Windows. I don’t know if CPU usage can be useful in a GeeXLab demo but now it’s there.
A fixed a minor bug in the Vulkan plugin that led to a crash if a pipeline object was created without descriptor set. In simple cases, a descriptor set is not needed and my code wasn’t ready for those cases). Now it’s fixed. You can test a simple case with the vk/02-triangle-of-death_v6.xml demo available in the code sample pack.
Python plugin and reference guide
I also updated the Python plugin and most functions available in Lua are now also available in Python. The reference guide has been updated too and I also added a page with all documented functions in Lua and Python. Around one thousand functions… So be tolerant if a function is not correctly documented or if it’s not available in Python…
The code sample pack has been update as well (v3.7.0), and a new folder (learn/) has been added. This folder contains samples for discovering and learning GeeXLab.
2 – Downloads
The latest version of GeeXLab as well as code sample packs can be downloaded from THIS PAGE.
For bug-reports or feedbacks, a thread is available HERE.
3 – Changelog
Full changelog from beginning of time is available HERE.
Version 0.17.0.1 - 2017.09.28 ----------------------------- + added support of ImGui (v1.52) in Vulkan and OpenGL. A new lib is available in Lua and Python: gh_imgui. + [WINDOWS] added new set of functions in gh_utils to get CPU usage (see cpu_usage_xxxx()). ! updated the online reference guide. ! updated the code sample pack with a new learn/ folder. ! updated the Python plugin with missing functions. + added create_from_shader_files() to gh_gpu_program lib (lua / python). + added an internal function to write in the log file all Lua functions. + added mouse_get_position() alias to gh_input library (lua / python). + added get_time_step() to gh_utils lib (lua / python) + added get_api_name() to gh_renderer lib (lua / python) * fixed a crash in the creation of a pipeline object with no descriptor set (Vulkan). * fixed a rare buffer overflow in some trace functions. ! gh_texture.create_from_file() now enables mipmap generation by default.