The framework includes OpenGL, Vulkan and WebGPU renderers. Though these renderers are fine for most applications, use cases that require more advanced rendering, including basic features such as having multiple pipelines, are impossible to achieve with the built-in renderers.
This is why, with release 1.3 of the framework, the entire renderer abstraction was reworked to allow projects to plug in their own custom rendering solutions.
Build options
With the current arrangement, developers are only limited to OpenGL, Vulkan and WebGPU, even for their custom renderers. To allow for a wider selection of rendering backends, we also decided to include the following build options that automatically compile and link to the corresponding imgui backends and APIs:
IMGUI_BUILD_WITH_METAL- macOS-only. Builds with the Metal APIIMGUI_BUILD_WITH_DX11- Windows-only. Builds with DirectX 11IMGUI_BUILD_WITH_DX11- Windows-only. Builds with DirectX 12
Configuration
In order to start using a custom renderer, you need to configure your Config/Core/Renderer.yaml file so that the renderer field is set to custom. More information can be found here.
In code, renderer backends are represented using the RendererType enum, which looks like this:
enum UImGui_RendererType
{
UIMGUI_RENDERER_TYPE_OPENGL,
UIMGUI_RENDERER_TYPE_VULKAN_WEBGPU,
UIMGUI_RENDERER_TYPE_CUSTOM,
UIMGUI_RENDERER_TYPE_COUNT,
UIMGUI_RENDERER_TYPE_ALT_NAMES_COUNT
};
So setting the renderer type to custom automatically switches this variable to UIMGUI_RENDERER_TYPE_CUSTOM.
A custom renderer also has access to the custom-renderer field, which can be parsed using a callback that will be introduced on the following page.