A GameMaker demo project for the GMRT ImGUI compatibility module — a binding of Dear ImGui exposed to GML as a single global static class, ImGui.
The project is a live playground: one object, one room, and a Step event that exercises most of the API surface — windows, docking, tables, plots, drag & drop, draw lists, multi-select, custom TTF fonts and Unicode glyph ranges. It also ships a full API reference and the GML enum definitions you need to call the module.
Everything in this module is experimental and may change in future GMRT releases.
- GameMaker with the GMRT runtime (project built against IDE
2026.0.0.16). - The ImGUI compatibility module available to the runtime. This repo contains no extension —
ImGuiis resolved by GMRT itself, not by an asset in the project tree.
- Open
ImGuiGML.yypin the GameMaker IDE. - Select a GMRT target and run.
Room1spawns a singleObject1, which draws the whole demo from its Step event.
There is nothing to configure. The window is 1366×768 with docking enabled by default (global.enable_docking in Object1's Create event).
| Path | What it is |
|---|---|
objects/Object1/Create_0.gml |
Demo state, font loading, glyph ranges, and all ImGui* enum definitions |
objects/Object1/Step_0.gml |
The demo UI itself — every widget call lives here |
scripts/Script1/Script1.gml |
GM-side helper constructors: ImColor, ImGuiWindowClass, ImGuiSelectionBasicStorage |
notes/ImGui_API.md/ImGui_API.md.txt |
Full API reference — ~2400 lines of signatures, per-argument notes, and the enums |
datafiles/fonts/ |
Noto Sans (Main + Hiragana Bold) and Roboto, plus their Apache-2.0 licence |
sprites/ |
spr_example, spr_example2 — used for Image, ImageButton, and draw-list image calls |
Every function is static on the ImGui class, so you call it directly. UI is built imperatively each frame from a Step event:
/// Step Event
if (ImGui.Begin("Hello", { open: true })) {
ImGui.Text("ImGui version: " + ImGui.GetVersion());
if (ImGui.Button("Click me")) {
show_message_async("clicked");
}
my_slider = ImGui.SliderInt("Amount", my_slider, 0, 10);
}
ImGui.End();Two conventions are worth knowing up front:
- State structs. Widgets that need to write state back to you take a struct, e.g.
ImGui.Begin("Name", { open: true })— ImGui flipsopentofalsewhen the user clicks the close button. - Value returns. Sliders and inputs return their new value rather than mutating in place:
val = ImGui.SliderFloat("x", val, 0, 1). Array variants (SliderInt4,InputFloat4, …) write into the array you pass.
British and American spellings (Colour / Color) are aliases for the same native function.
The GML enum definitions live in the #region Enums block at the bottom of Object1's Create event, and again at the end of the API reference. Copy that block into your own project — ImGuiWindowFlags, ImGuiTableFlags, ImGuiCol, ImGuiStyleVar, ImDrawFlags, and the rest are plain GML enums, not something the module provides.
scripts/Script1/Script1.gml supplies the GM-side structs the module expects:
// Colours for the *4 colour editors and pickers
var c = new ImColor(c_aqua, 0.5); // GM colour + alpha
var d = new ImColor(128, 255, 255); // r, g, b
ImGui.ColorPicker4s("Pick", c);
c.Color(); // BGR int, for GM drawing functions
c.Alpha();
// Multi-select storage — remember to Destroy() it
var sel = new ImGuiSelectionBasicStorage();
sel.ApplyRequests(ImGui.BeginMultiSelect(flags, sel.GetSize(), count));
sel.Contains(index);
sel.Destroy();ImGuiWindowClass is also defined here for the window-class/viewport calls.
Text and layout · buttons (regular, small, invisible, arrow, colour) · images, image buttons and GameMaker surfaces rendered into ImGui · tree nodes and collapsing headers · sliders and drag widgets · text/int/float inputs, multiline and hint variants · colour pickers and editors · tables with per-cell background colours · tab bars · line and histogram plots · dock spaces and the DockBuilder API (programmatic split layout) · drag & drop with copy/move/swap modes · TTF font loading with Cyrillic and Japanese glyph ranges · draw lists (text, circles, béziers, rounded images, n-gons) · the multi-select system with box-select and keyboard navigation · the built-in ShowDemoWindow.
- Fonts are included files under
datafiles/fonts/and are loaded at runtime fromassets/fonts/…. OnlyNotoSans-Main.ttfis loaded by the demo; Roboto and the Hiragana Bold face are there for you to experiment with. - Arabic text renders, but BIDI ordering and letter joining are not handled — see
str_marhabain the Create event. static_get(ImGui)is used to peek at module internals and is guarded in atry/catch; older runtimes without it show a disabled field and a warning tooltip instead.*.resource_orderand the GMRTBuilddirectory are gitignored;.yyfiles are markedlinguist-generatedand forced to LF.
- Dear ImGui by Omar Cornut.
- The demo layout is adapted from knno/ImGM; the DockBuilder setup follows this gist by Aidan Sun.
- Red panda artwork by @Snoozercreation.
- Bundled fonts (Noto Sans, Roboto) are licensed under Apache-2.0 — see
datafiles/fonts/LICENSE.txt.