GeeXLab 0.10.0 with Vulkan support released for Windows and Linux


A new version of GeeXLab is available for Windows 64-bit and Linux 64-bit. The branch 0.10.x comes with new features, improvements and bugfixes.

You can download GeeXLab from THIS PAGE.

1 – Release Highlights

1.1 – New startup scene

The first change you will notice is the startup scene. It has been re-coded from scratch and uses some of the new functions (true type fonts, Vulkan):


The startup scene is nothing more than a regular GeeXLab demo that has been embedded in GeeXLab. You can access to its source code with live coding tools.

1.2 – Vulkan support

Ok, even if Vulkan support comes in second position in the release highlights, Vulkan is the big thing of GeeXLab 0.10.0.x. I will detail in another post how to play with Vulkan in GeeXLab. Now, all you need to know is that Vulkan support is far from complete, only basic functionalities have been added: you can load SPIR-V shaders and textures (2D + array), create pipeline objects, descriptor sets and GPU buffers. Other functionalities such as render targets (for post processing) will be added later. Check this WIP thread for updates.

Vulkan is available in a plugin that is dynamically loaded when a Vulkan demo is started. The Vulkan plugin is available on Windows 64-bit and Linux 64-bit. I will release the Windows 32-bit version with the full release of GeeXLab (windows, linux, osx and rpi).

GeeXLab + Vulkan

1.3 – Code Sample Pack

The code sample pack has been entirely re-organized. There are now separate folders for each 3D API supported by GeeXLab: OpenGL (2.1, 3.2, 4.0, etc), OpenGL ES 2.0 (essentially for the Raspberry Pi), Direct3D 12 and of course Vulkan!

GeeXLab code sample pack

1.4 – New TrueType Font Library

The support of TrueType fonts is an important feature and any serious demo tool. So far the only way to display texts with TTF fonts was to use use functions of the FTGL plugin. These functions work fine and are fast but there are two drawbacks: a plugin is required (plugin_gxc_ftgl_x64.{dll|so|dylib}) and only OpenGL is supported. No way to use this plugin in Direct3D 12 and Vulkan scenes. Not cool 🙁

To display text in Direct3D 12 demos, I recently added the support of fonts via Direct2D. This support works but it is very slow and is limited to D3D12!

It was time to have an unified TrueType fonts management that works across all 3D APIs and platforms. For that I used that nice library: stb_truetype.h. Now I have a decent font management that works everywhere: on all platforms (Windows, Linux, OSX and Raspberry Pi) and with all 3D APIs (OpenGL, Vulkan and Direct3D 12). What’s more, the new font lib is embedded in GeeXLab, a plugin is no longer required.

All new functions are available via the new Lua/Python library: gh_font. I will explain how to use it in an upcoming post. If you’re impatient, just look at the code sample pack (gl-21/font-truetype/ or d3d12/11-truetype_font.xml or vk/06-truetype-font.xml).

GeeXLab + truetype fonts management

1.5 – New 3D Loader for STL objects

GeeXLab supports now the STL binary (StereoLithography) format. More information about the STL format can be found HERE. STL files are available in two formats: text or binary. GeeXLab only supports binary formats because they are simpler and faster to load.

A demo that load a STL object is available in the code sample pack: gl-32/loader-object-stl/

GeeXLab + STL 3D format

2 – Changelog

Version - 2015.04.12
+ [WINDOWS / LINUX] added Vulkan support with basic functionalities: meshes, 
  GPU programs, 2D textures + 2D arrays, uniform buffers, pipeline
  state objects. New functions have been added in gh_renderer and 
  gh_gpu_program lib (lua / python).
+ [WINDOWS / LINUX] added gpu_index attribute in XML window node to select 
  a particular GPU with Vulkan renderer.
+ added new gh_font lib to render texts using True Type fonts (lua and python). 
+ added three functions in gh_renderer lib (OpenGL, Vulkan and Direct3D 12) to 
  draw very simple primitives without vertex buffer: draw_points(), draw_lines() 
  and draw_triangles(). Vertices must be defined in the vertex shader. 
+ added update_vertices_position() and update_vertices_color() to 
  gh_vertex_pool lib (lua / python).
+ added create_from_file_loader_stl() in gh_model lib for the loading of 3D meshes
  in STL binary format.
+ added set_num_patch_vertices() to gh_renderer lib (lua).
! [WINDOWS] updated the internal flip framebuffer function of the Direct3D 12 plugin
  to improve stability.
* fixed bug in gh_renderer.blending().
* fixed bitmap font rendering (gh_utils.font_bm_xxxx()) bug in OpenGL 2.1 
  (code sample pack: /gl-21/bitmap-fonts/).
* fixed a memory leak in the FreeImage plugin.
* [WINDOWS / OSX] bugfix: the log file is now correctly opened (Tools > Show log file).
! updated gh_nvg lib with latest version of NanoVG.
! updated gh_utils.get_host_app_dir().
! gh_utils.hex_color_to_rgb() updated to support the # character of the
  HTML color (ex: "#ff8844").