Repository navigation
Releases
v1.93.0
Dear ImGui v1.93.0 🎨🖌️
✋ Reading the changelog is a good way to keep up to date with whaat Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Language Bindings & Engine Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to sponsors ❤️
- BeamNG / G3Dvu / OTOY / Riot Games / Scorewarrior / Supercell / Asobo Studio / Artifex Mundi / ID Software / Lucid Games / Mobigame / Remedy Entertainment / Passtech Games / Planestate Software / River End Games / RocketWerkz / SCS Software / Sofistik / Tanius Technology / Thatgamecompany / Tuxedo Labs / Valve / Vector Unit !
As well as various paid/corporate licenses to imgui_test_engine supporting the project.
News about Third-Party Projects
- imgui_explorer: @pthom's fabulous imgui_manual has been improved and rebranded as imgui_explorer. It also now includes ImPlot and ImPlot3d: https://pthom.github.io/imgui_explorer. The latest version releasing today has improved interface and touch conrols on mobile/phone devices. He also improved Dear ImGui Bundle Explorer which packs in more extensions.
- ImGuiColorTextEdit: @goossens has rewritten the fancy text editor initially created by @BalazsJako (which was unmaintained and had many small forks). New version: https://github.com/goossens/ImGuiColorTextEdit
Check the Useful Extensions/Widgets page for many more.
Changes in v1.93.0 (since v1.92.9b)
🆘 PS: v1.92.8 contained a signature change for the trailing optional parameters of ImDrawList::AddRect(), AddPolyline(), PathStroke(). C++ users should be notified at compile-time, but languages without type-checking may only be notified at runtime. Read v1.92.8 if using non a C++ language. Consider enabling IMGUI_DISABLE_OBSOLETE_FUNCTIONS from time to time to get rid of obsolete calls.
In 1.93.0, the ImDrawList rendering API has been improved to be more robust and more consistent over the whole range of shapes. The rendering now matches much closer to common vector drawing APIs, like html canvas. Improvements, like anti-aliased line endings and stroke position were added. The coordinates passed to the API are now consistently describing shape outlines.
For code using custom rendering: some details are now rendered slightly differently (even if generally more consistent). The difference in rendering is in the range of half a pixel, but that can lead to issues like some lines now look blurrier or more transparent. All Dear ImGui widgets should appear identical or better.
The rendering of common shapes was optimized when the shapes fall on integer coordinates (which is most of the UI). This includes skipping anti-aliasing when not needed, or using textures instead of tessellated geometry to draw round corners. The varying code-paths are designed to look indistinguishable from each others.
New rendering code fixes some inconsistencies between graphics APIs (e.g. DirectX vs OpenGL) which are using different diamond exits rules. New code should work precisely the same regardless of which graphics API is used (note that using _StrokeLegacy mode can lead to the same old inconsistencies).
New rendering code also deals better with animating thickness and rounding (integer values are recommended).
While the current version doesn't make lots of visible use of the new features and facilities, they are among the pillars that will make it easier to create prettier contents, both for custom rendering and future versions of the library.
Use ImDrawFlags_StrokeLegacy mode to emulate old rendering:
- Per-primitive:
draw_list->AddLine(..., ..., ImDrawFlags_StrokeLegacy); - For a given scope:
draw_list->PushDrawFlag(ImDrawFlags_StrokeLegacy, true); draw_list->AddLine(...); draw_list->PopDrawFlag(); - Globally:
ImGui::Checkbox("DefaultsToStrokeLegacy", &io.ConfigDebugDrawListDefaultsToStrokeLegacy); // Map to a checkbox - Globally:
io.ConfigDebugDrawListDefaultsToStrokeLegacy = io.KeyShift; // Map on Shift
Don't panic!
Many applications will not notice any difference! You will more likely see differences if you used lots of direct ImDrawList calls for custom rendering.
Credits
For ImDrawList changes in 1.93.0:
- main work courtesy of Mikko Mononen (@memononen).
- additional work/reviewing/guidance by @ocornut.
- with legacy bits from @thedmd, @potocpav.
Other changes:
- tagged with @, or @ocornut when omitted.
- every bit of code merged carefully reviewed by a caring human (me).
Refer to our guides:
📘 ImDrawList Vector Rendering Reference ❤️
https://github.com/ocornut/imgui/wiki/Draw-List
(includes a precise list of differences between 1.92.9 and 1.93.0).
📘 Pixel Perfect Anti-aliased Rendering ❤️
https://github.com/ocornut/imgui/wiki/Pixel-Perfect-Rendering
📘 How Anti-aliased Polyline Rendering is Implemented ❤️
https://github.com/ocornut/imgui/wiki/Polyline-Rendering
🗨️ Discussion topic #9504
(if you have a problem to discuss, please open a new issue)
🔍 Interactive 1.92.9 vs 1.93 Troubleshooting / Testbed w/ commentary ❤️
https://www.dearimgui.com/docs/drawlist_v193
Breaking Changes
ImDrawList:
AddLine(): removed the (+0.5f,+0.5f) offset that was sneakily added to input coordinates. (#9504)- This fixes inconsistencies in the API and matches the PathXXX API.
- It seems scary but in reality
AddLine()is not used that often and many won't immediately notice the difference. - By default, stroke thickness extends on both side of the given segment. e.g for a "pixel-perfect" looking line with thickness=1.0f, coords should be passed as center of each ends of the line.
- Use
ImDrawFlags_StrokeLegacyto use old offset if required. Or you can apply the offset manually! - Generally better, simple and faster to use
AddLineH(),AddLineV()functions added in 1.92.8. - READ IF YOU ARE MINDFUL OF PIXEL-PERFECTNESS IN YOUR CUSTOM RENDERING/WIDGETS USING
AddLine():- TRANSITION GUIDE FOR AXIS-ALIGNED LINES:
- When switching from legacy
AddLine()values toAddLineV(),AddLineH()you can keep same inputs coordinates as before:- Old
AddLine({x, y1}, {x, y2}, col)-->AddLineV(x, y1, y2, col);// Vertical line. - Old
AddLine({x1, y}, {x2, y}, col)-->AddLineH(x1, x2, y, col);// Horizontal line. - This will be equivalent and faster for thickness=1.0f lines.
- Old
- Since
AddLine()use default stroke pos Center andAddLineV(),AddLineH()use Inside, thickness>1.0f strokes will differ. UsingImDrawFlags_StrokeCenterwill match old result more closely (aka look centered), but is more likely to look blurry as it already did before. - Read table below about StrokePos and the Pixel-Perfect Rendering guide if you care about pixel-perfect lines.
- When switching from legacy
- TRANSITION GUIDE FOR DIAGONAL LINES:
- Your lines will appear offset by -0.5f pixels on each axis. Being anti-aliased diagonal lines, they won't look particularly better or worse, just slightly offset. It'll likely only b...
- TRANSITION GUIDE FOR AXIS-ALIGNED LINES:
v1.92.9b
Dear ImGui v1.92.9b : Hotfix 🔥
✋ Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Language Bindings & Engine Backends
- and more! 👌
Changes in v1.92.9b (since v1.92.9)
This is a hot-fix for two small regressions in 1.92.9, one which would affect many people.
- DragXXX, SliderXXX: fixed a regression in 1.92.9 where clicking a previously Ctrl+Clicked field would flick it to text edit mode for one frame. (#9476, #701)
- Tables: fixed Y2 position of lower horizontal border (
ImGuiTableFlags_BordersOuterH) being off by one pixel when vertical ones are not also enabled. [@thedmd] - Tables: fixed X position of angled borders being off by half a pixel. [@thedmd]
- ImDrawData: fixed a regression in 1.92.9 where legacy/obsoleted
ImDrawData::CmdListsCountwas always 0. Prefer usingImDrawData::CmdList.Sizeanyway.
Also see previous releases details.
💰 🙏 Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
v1.92.9
Dear ImGui v1.92.9 🌞
✋ Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
❗❗ EDIT: Followup Hot-fix: see 1.92.9b. ❗❗
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Language Bindings & Engine Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to past years sponsors ❤️
- Asobo Studio !
- Artifex Mundi !
- BeamNG !
- G3Dvu !
- ID Software !
- Lucid Games !
- OTOY !
- Mobigame !
- Remedy Entertainment !
- RocketWerkz !
- Passtech Games !
- Planestate Software !
- River End Games
- Riot Games !!
- SCS Software !
- Scorewarrior !
- Sofistik !
- Tanius Technology !
- Thatgamecompany !
- Tuxedo Labs !
- Supercell !
- Valve !
- Vector Unit !
As well as various paid/corporate licenses to imgui_test_engine supporting the project.t
News about Third-Party Projects
-
imgui_explorer: @pthom's fabulous imgui_manual has been improved and rebranded as imgui_explorer. It also now includes ImPlot and ImPlot3d: https://pthom.github.io/imgui_explorer. He also improved Dear ImGui Bundle Explorer which packs in more extensions.
-
ImGuiColorTextEdit: @goossens has rewritten the fancy text editor initially created by @BalazsJako (which was unmaintained and had many small forks). New version: https://github.com/goossens/ImGuiColorTextEdit
-
VisualNodeSystem New node editor by @Azzinoth
https://github.com/Azzinoth/VisualNodeSystem and see https://github.com/ocornut/imgui/wiki/Useful-Extensions#node-editors -
imgui_threaded_rendering has been updated to support 1.92+ texture queue.
See https://github.com/ocornut/imgui_club and (#8597)[https://github.com//issues/8597]. -
ImGui.NET which has been a bit dormant - because some companies prevent their employees from working on existing OSS - should be updated soon, courtesy of @zaafar. See https://github.com/ImGuiNET/ImGui.NET / https://github.com/ImGuiNET/ImGui.NET-nativebuild
-
implot and implot3d are still kicking, thanks @brenocq for stepping up!
See https://github.com/epezent/implot and https://github.com/brenocq/implot3d -
Unreal Engine users? See "Converging toward a principal Unreal Engine backend/binding for Dear ImGui?". The thread backfired into yet another backend being created: TBImGui (ImGuiToolbox) by @Lewisscrivens. Unrelated: xkcd: Standards.
Check the Useful Extensions/Widgets page for many more.
Changes in v1.92.9 (since v1.92.8)
🆘 1.92.8 contained a signature change for the trailing optional parameters of ImDrawList::AddRect(), AddPolyline(), PathStroke(). C++ users should be notified at compile-time, but languages without type-checking may only be notified at runtime. Read v1.92.8 if using non a C++ language. Consider enabling IMGUI_DISABLE_OBSOLETE_FUNCTIONS from time to time to get rid of obsolete calls.
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ? You can read the recently improved docs/BACKENDS.md.
Breaking Changes
- DragXXX, SliderXXX, InputScalar: with
ImGuiItemFlags_LiveEditOnInputScalarnow defaulting to being disabled: inputting a value with the keyboard doesn't write intermediate values to the backing variable. (#9476)- Before:
DragFloat()with user typing "123" --> write back 1, then 12, then 123. - After:
DragFloat()with user typing "123" --> write back 123 when validated/unfocused. - You can enable the flag back for a given scope if needed by specific widget/behavior. Read below for details.
- Before:
- TreeNode: commented out legacy name
ImGuiTreeNodeFlags_SpanTextWidthwhich was obsoleted in 1.90.7 (May 2024). UseImGuiTreeNodeFlags_SpanLabelWidth. - ColorEdit: obsoleted
SetColorEditOptions()function added in 1.51 (June 2017) in favor of directly poking toio.ConfigColorEditFlags. More consistent and easier to discover. - Drag and Drop: commented out legacy name
ImGuiDragDropFlags_SourceAutoExpirePayloadwhich obsoleted in 1.90.9 (July 2024).- Use
ImGuiDragDropFlags_PayloadAutoExpire.
- Use
- ImDrawData: marked
CmdListsCountas obsolete (technically was obsoleted in 1.89.8).- Before:
draw_data->CmdListsCount, After:draw_data->CmdLists.Size.
- Before:
Other Changes
LiveEdit on/off:
- Added
ImGuiItemFlags_LiveEditOnInputTextandImGuiItemFlags_LiveEditOnInputScalarflags to configure the timing of applying edits of backing variables when typing values using a keyboard. (#9476, #701, #3936, #3946, #5904, #6284, #8149, #8065, #8665, #9117, #9299, #700, #1351, #1875, #2060, #2215, #2380, #2550, #3083, #3338, #3556, #4373, #4714, #4885, #5184, #5777, #6707, #6766, #8004, #8303, #8915, #9308)ImGuiItemFlags_LiveEditOnInputTextis enabled by default (same as before): The expectation is that for strings/text, enabling LiveEdit is a better default.ImGuiItemFlags_LiveEditOnInputScalaris disabled by default (new behavior): The expectation is that for numeric/scalars values, disabling LiveEdit is a better default.- Until now:
- Edits where always applied immediately to backing variable, which is equivalent to the
ImGuiItemFlags_LiveEditXXXflags being enabled. - Typing '123' in an integer field would output successively 1, 12 then 123.
- Most uses of
IsItemDeactivatedAfterEdit()orImGuiInputTextFlags_EnterReturnsTruewere actually workarounds for this issue. Advanced applications would typically useIsItemDeactivatedAfterEdit()to distinguish transactions. Workarounds often required a backing store for scalar values, and there were also a few niggles related toIsItemDeactivatedAfterEdit()when using+/-buttons of anInputInt()widgets. - Many of those situations can now be naturally simplified when disabling
ImGuiItemFlags_LiveEditOnInputScalaris disabled.
- Edits where always applied immediately to backing variable, which is equivalent to the
- The new flags allows disabling this behavior selectively for strings fields such as
InputText()vs scalar fields:SliderInt(),InputFloat(), etc.- When LiveEdit is disabled, edits are applied when pressing enter, tabbing out, clearing a field or deactivating due to a focus loss.
- The flag may be altered programmatically, e.g. for the entire frame scope:
NewFrame();
PushItemFlag(ImGuiItemFlags_LiveEditOnInputScalar, true); // Enable for scalars for the whole frame
[...]
PopItemFlag();
EndFrame(); // ..or for a specific widget:
PushItemFlag(ImGuiItemFlags_LiveEditOnInput, true); // Enable for one widget
SliderInt(...);
PopItemFlag();- We intentionally are not adding
io.ConfigLiveEditXXXfields to dictate the default value of eachImGuiItemFlags_LiveEditXXX, because this is not expected to be a user preference but a programmer/widget preferences. And we strive to make the toolkit consistent.
Windows:
- Clicking on a window's empty-space to move/focus a window checks for lack of mouse button ownership. This gives an additional opportunity for user code to bypass it without using a clickable item. (#9...
v1.92.8
Dear ImGui v1.92.8 🌵
✋ Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Language Bindings & Engine Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to sponsors ❤️
- Asobo Studio !
- Artifex Mundi !
- BeamNG !
- G3Dvu !
- ID Software !
- Lucid Games !
- OTOY !
- Mobigame !
- Remedy Entertainment !
- RocketWerkz !
- Passtech Games !
- Planestate Software !
- River End Games
- Riot Games !
- SCS Software !
- Scorewarrior !
- Sofistik !
- Tanius Technology !
- Thatgamecompany !
- Tuxedo Labs !
- Supercell !
- Valve !
- Vector Unit !
As well as various paid/corporate licenses to imgui_test_engine supporting the project.t
News about Third-Party Projects
- imgui_explorer: @pthom's fabulous imgui_manual has been improved and rebranded as imgui_explorer. It also now includes ImPlot and ImPlot3d: https://pthom.github.io/imgui_explorer. He also improved Dear ImGui Bundle Explorer which packs in more extensions.
-
ImGuiColorTextEdit: @goossens has rewritten the fancy text editor initially created by @BalazsJako (which was unmaintained and had many small forks). New version: https://github.com/goossens/ImGuiColorTextEdit
-
Unreal Engine users? See "Converging toward a principal Unreal Engine backend/binding for Dear ImGui?"
Check the Useful Extensions/Widgets page for many more.
Changes in v1.92.8 (since v1.92.7)
🆘 1.92.8 contains a signature change for the trailing optional parameters of ImDrawList::AddRect(). C++ users should be notified at compile-time, but languages without type-checking may only be notified at runtime. Read below. This is unusually bold but we occasionally need this to move forward sanely.
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ? You can read the recently improved docs/BACKENDS.md.
Breaking Changes
- DrawList: swapped the last two arguments of
AddRect(),AddPolyline(),PathStroke().
-- void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0, float thickness = 1.0f);
++ void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, float thickness = 1.0f, ImDrawFlags flags = 0);
-- void ImDrawList::AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness);
++ void ImDrawList::AddPolyline(const ImVec2* points, int num_points, ImU32 col, float thickness, ImDrawFlags flags = 0);
-- void ImDrawList::PathStroke(ImU32 col, ImDrawFlags flags = 0, float thickness = 1.0f);
++ void ImDrawList::PathStroke(ImU32 col, float thickness = 1.0f, ImDrawFlags flags = 0);Added inline redirection functions when IMGUI_DISABLE_OBSOLETE_FUNCTIONS is off.
Marked the old functions are =delete when IMGUI_DISABLE_OBSOLETE_FUNCTIONS is on, to allow for better type-checking.
Effectively the typical call site is simplified:
-- window->DrawList->AddRect(p_min, p_max, color, rounding, ImDrawFlags_None, border_size);
++ window->DrawList->AddRect(p_min, p_max, color, rounding, border_size);- Notes:
- Users of C++ and other languages with type-checking will be notified at compile-time of any mistakes.
- Users of high-level bindings or languages with no type-checking will be notified at runtime via an assert for invalid flags value. If you are a binding maintainer consider doing something to facilitate transition or error detection.
- This is perhaps the worst breaking change in our history :( but it makes ImDrawList function signatures consistent. As we are aiming to add flags and features to variety of ImDrawList functions, that consistency becomes more important. The new order is also more convenient as
flagsare less frequently used thanthicknessin real code. - As a general policy in Dear ImGui, all our flags default to 0 so ImDrawFlags_None was likely written 0 in some call sites.
- Consider adding
#define IMGUI_DISABLE_OBSOLETE_FUNCTIONSin your imconfig.h, even temporarily, to clean up legacy code. - Reminder: you do NOT need to specify
ImDrawFlags_RoundCornersAllfor rounding, it is already the default!
- DrawList: obsoleted
ImDrawCallback_ResetRenderStatein favor of usingImGui::GetPlatformIO().DrawCallback_ResetRenderState, which is part of our new standard draw callbacks. (#9378) Redirecting the earlier value into the later one when set, so both old and new code should work. - Backends: Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler. This change allows us to facilitate changing samplers, in line with other backends. (#914) [@yaz0r, @ocornut]
- When creating your own descriptor pool (instead of letting backend creates its own):
- Before: need at least
IMGUI_IMPL_VULKAN_MINIMUM_IMAGE_SAMPLER_POOL_SIZEdescriptors of typeVK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER. - After: need at least
IMGUI_IMPL_VULKAN_MINIMUM_SAMPLED_IMAGE_POOL_SIZEdescriptors of typeVK_DESCRIPTOR_TYPE_SAMPLED_IMAGE+IMGUI_IMPL_VULKAN_MINIMUM_SAMPLER_POOL_SIZEdescriptors of typeVK_DESCRIPTOR_TYPE_SAMPLER.
- Before: need at least
- When registering custom textures: changed ImGui_ImplVulkan_AddTexture() signature to remove Sampler.
- Before:
ImGui_ImplVulkan_AddTexture(VkSampler, VkImageView, VkImageLayout) - After:
ImGui_ImplVulkan_AddTexture(VkImageView, VkImageLayout) - Kept inline redirection function that ignores the sampler (will obsolete).
- Before:
- When creating your own descriptor pool (instead of letting backend creates its own):
- Backends: DirectX10, DirectX11, SDLGPU3, Vulkan: removed samplers from
ImGui_ImplXXXX_RenderState. (#9378) Prefer to use backend-agnostic DrawCallback_SetSamplerLinear which works everywhere! If there is a legit need/request for them or any render state we can always add them back.
Other Changes
DrawList:
- Made
AddCallback()user data default to Null for convenience. - Added
AddLineH(),AddLineV()helpers to draw horizontal and vertical lines. [@memononen]
The new functions are more optimal and will be part of a larger effort in 1.93 to fix inconsistencies and improve the DrawList API. In the current API,AddLine()adds a "magic" +0.5f offset and then center the line, whereasAddLineH()/AddLineV()use the right side of the line to expand. For thickness=1.0f lines this is equivalent and faster:AddLine({10,3}, {20,3}, ...)-->AddLineH(x1=10, x2=20, y=3, ...)AddLine({3,10}, {3,20}, ...)-->AddLineV(x=3, y1=10, y2=20, ...)- For larger integer thickness,
AddLine()will center but may be blurry,AddLineH()/AddLineV()will expand "inside" (to the right side) and will always be sharp. A subsequent release will expand on those concepts and add new options.
- Added room in
ImGuiPlatformIOfor standard backend-agnostic draw callbacks. Those callbacks are setup/provided by the backend and available in most of our standard backends. They allow backend-agnostic code from e.g. switching to a Nearest/Point sampler without messing with custom Renderer-specific callbacks:platform_io.DrawCallback_ResetRenderState; // Request to reset the graphics/render state.- `p...
v1.92.7
Dear ImGui v1.92.7: Spring again 🌱
✋ Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Language Bindings & Engine Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to sponsors ❤️
First time sponsors!
And all recent years sponsors:
- Asobo Studio !
- BeamNG !
- G3Dvu !
- Gravity Well !
- ID Software !
- Lucid Games !
- OTOY !
- Mobigame !
- Remedy Entertainment !
- Passtech Games !
- Planestate Software !
- River End Games
- Riot Games !
- SCS Software !
- Scorewarrior !
- Sofistik !
- Tanius Technology !
- Thatgamecompany !
- Tuxedo Labs !
- Supercell !
- Valve !
- Vector Unit !
As well as various paid/corporate licenses to imgui_test_engine supporting the project.t
Fun fact 🏆
The french game industry kindly awarded me an honorary prize at the Pegases 2026 awards, principally motivated by my work on Dear ImGui. (photos: x / bsky).
News about Third-Party Projects
- imgui_explorer: @pthom's fabulous imgui_manual has been improved and rebranded as imgui_explorer. It also now includes ImPlot and ImPlot3d: https://pthom.github.io/imgui_explorer/
- @pthom also improved his Dear ImGui Bundle Explorer.
- ImGuiColorTextEdit: @goossens has rewritten the fancy text editor initially created by @BalazsJako (which was unmaintained and had many small forks). New version: https://github.com/goossens/ImGuiColorTextEdit
- Unreal Engine users? See "Converging toward a principal Unreal Engine backend/binding for Dear ImGui?"
Check the Useful Extensions/Widgets page for many more.
Changes in v1.92.7 (since v1.92.6)
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ? You can read the recently improved docs/BACKENDS.md.
Breaking Changes
- Separator(): fixed a legacy quirk where
Separator()was submitting a zero-height item for layout purpose, even though it draws a 1-pixel separator. The fix could affect code e.g. computing height from multiple widgets in order to allocate vertical space for a footer or multi-line status bar. (#2657, #9263). The "Console" example had such a bug:Should be:float footer_height = style.ItemSpacing.y + ImGui::GetFrameHeightWithSpacing(); BeginChild("ScrollingRegion", { 0, -footer_height });
When such idiom was used and assuming zero-height Separator, it is likely that in 1.92.7 the resulting window will have unexpected 1 pixel scrolling range.float footer_height = style.ItemSpacing.y + style.SeparatorSize + ImGui::GetFrameHeightWithSpacing(); BeginChild("ScrollingRegion", { 0, -footer_height });
- Multi-Select: renamed
ImGuiMultiSelectFlags_SelectOnClicktoImGuiMultiSelectFlags_SelectOnAuto. Kept inline redirection enum (will obsolete). - Combo(), ListBox(): commented out legacy signatures which were obsoleted in 1.90 (Nov 2023), when the getter callback type was changed from:
bool (*getter)(void* user_data, int idx, const char** out_text)toconst char* (*getter)(void* user_data, int idx).
Other Changes
- TreeNode:
- Moved
TreeNodeGetOpen()helper to public API. I was hesitant to make this public because I intend to provide a more generic and feature-full version, but in the meanwhile this will do. (#3823, #9251, #7553, #6754, #5423, #2958, #2079, #1947, #1131, #722) - In 'Demo->Property Editor' demonstrate a way to perform tree clipping by fast-forwarding through non-visible chunks. (#3823, #9251, #6990, #6042) Using
SetNextItemStorageID()+TreeNodeGetOpen()makes this notably easier than it was prior to 1.91.
- Moved
- InputText:
- Shift+Enter in multi-line editor always adds a new line, regardless of
ImGuiInputTextFlags_CtrlEnterForNewLinebeing set or not. (#9239) - Reworked
io.ConfigInputTextEnterKeepActivemode so that pressing Enter will deactivate/reactivate the item in order for e.g.IsItemDeactivatedAfterEdit()signals to be emitted the same way regardless of that setting. (#9001, #9115) - Fixed a glitch when using
ImGuiInputTextFlags_ElideLeftwhere the local x offset would be incorrect during the deactivation frame. (#9298) - Fixed a crash introduced in 1.92.6 when handling
ImGuiInputTextFlags_CallbackResizein certain situations. (#9174) - Fixed selection highlight Y1 offset being very slightly off (since 1.92.3). (#9311) [@v-ein]
- InputTextMultiline: fixed an issue introduced in 1.92.3 where line count calculated for vertical scrollbar range would be +1 when the widget is inactive, word-wrap is disabled and the text buffer ends with '\n'. Fixed a similar issue related to clipping large amount of text.
- InputTextMultiline: avoid going through reactivation code and fixed losing revert value when activating scrollbar.
- InputTextMultiline: fixed an issue where edit buffer wouldn't be reapplied to back buffer on the
IsItemDeactivatedAfterEdit()frame. This could create issues when using the idiom of not applying edits beforeIsItemDeactivatedAfterEdit(). (#9308, #8915, #8273)
- Shift+Enter in multi-line editor always adds a new line, regardless of
- Tables:
- Allow reordering columns by dragging them in the context menu. (#9312)
- Context menu now presents columns in display order. (#9312)
- Fixed and clarified the behavior of using
TableSetupScrollFreeze()with columns>1, and where some of the columns within that range were Hidable.- Before:
TableSetupScrollFreeze(N, 0): include the N left-most visible columns as part of the scroll freeze. So if you intentionally hide columns <N, the scroll freeze area would start covering the subsequent/following columns (N+1) etc. - After:
TableSetupScrollFreeze(N, 0): include the N left-most columns (regardless of visibility), as part of the scroll freeze. So if you intentionally hide columns <N, the scroll freeze area will cover less columns. - This is generally more sane and logical.
- Before:
- Fixed dragging a header to reorder outside of visible bounds (due to horizontal scrolling) from losing active id.
- Angled Headers: angled section for column being reordered via the regular headers stays highlighted during reordering.
- Style:
- Fonts: fixed an issue introduced in 1.92.6 where
style.FontBaseSizewould be cleared during the first frame if no fonts was explicitly added before. - Border sizes are now scaled (and rounded) by
ScaleAllSizes(). - When using large values with
ScallAllSizes(), the following items...
- Fonts: fixed an issue introduced in 1.92.6 where
v1.92.6
v1.92.6 🔍
❤️ Last year was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Language Bindings & Engine Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to recent years sponsors ❤️
Thanks to recent/renewing sponsors:
- G3Dvu !
- ID Software !
- Mobigame !
- Passtech Games !
And:
- Asobo Studio !
- BeamNG !
- Gravity Well !
- Lucid Games !
- MachineGames !
- OTOY !
- Planestate Software !
- Remedy Entertainment
- River End Games
- Riot Games !
- SCS Software !
- Scorewarrior !
- Sebastian Schöner !
- Sofistik !
- Thatgamecompany
- Supercell !
- Tanius Technology !
- Valve !
- Vector Unit !
🎤 Embarrassment time 🎤
Wookash Podcast had me a few months ago, if you think you can handle two hours of me rambling confusedly!
https://www.youtube.com/watch?v=2KPUMvyUMzM.
New/Recent Useful Third-Party Extensions
Unreal Engine users? See "Converging toward a principal Unreal Engine backend/binding for Dear ImGui?"
- ImRefl: An ImGui library using C++26 reflection to generate windows to easily display structs https://github.com/fullptr/imrefl
- ImReflect: Reflection-based ImGui wrapper: https://github.com/Sven-vh/ImReflect
- ImHTML: Render HTML in ImGui: https://github.com/BigJk/ImHTML
- imgui-module: C++20 module binding for ImGui. https://github.com/stripe2933/imgui-module
- ImAnim: Animation Engine for Dear ImGui https://github.com/soufianekhiat/ImAnim
Also check the Useful Extensions/Widgets page for a full list.
Changes (since v1.92.5)
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ? You can read the recently improved docs/BACKENDS.md.
TL;DR;
- Opinionatedly not focusing on styling and yet keeps looking a little bit better with every release 🎉
- Opinionatedly keeps increasing version number in a shy way.
- Exciting new alternative scalable default font ProggyForever.
- Font related tweak/fixes.
- Might-be-affecting-some breaking-change for bizarre old default parameter to
BeginPopupContextXXX(). - Added optional/configurable color markers for ColorEdit, and opt-in for multi-components Drags/Sliders.
- Tables, TreeNode, InputText, Navigation fixes etc.
- Word-wrapping improvements.
- Multi-viewports Z-ordered related fixed.
- Facilitate use of Nearest filtering for many backends (not yet fully backend agnostic).
- Many other things.
Breaking Changes
- Fonts:
AddFontDefault()now automatically selects an embedded font between:AddFontDefaultBitmap(): classic pixel-clean font. Recommended at Size 13px with no scaling.AddFontDefaultVector(): new scalable font. Recommended at any higher size.- The default selection is based on (
style.FontSizeBase * FontScaleMain * FontScaleDpi * DisplayDensity) reaching a small threshold, but old codebases may not set any of them properly. As as a result, it is likely that old codebases may still default toAddFontDefaultBitmap()`. - Prefer explicitly calling either of them based on your own logic! You can call
AddFontDefaultBitmap()to ensure legacy behavior.
- Fixed handling of
ImFontConfig::FontDataOwnedByAtlas = falsewhich did erroneously make a copy of the font data, essentially defeating the purpose of this flag and wasting memory (undetected since July 2015 and now spotted by @TellowKrinkle, this is perhaps the oldest bug in Dear ImGui history, albeit for a rarely used feature!) (#9086, #8465)
HOWEVER, fixing this bug is likely to surface bugs in user/app code:- Prior to 1.92, font data only needs to be available during the
atlas->AddFontXXX()call. - Since 1.92, font data needs to available until
atlas->RemoveFont(), or more typically until a shutdown of the owning context or font atlas. - The fact that handling of
FontDataOwnedByAtlas = falsewas broken bypassed the issue altogether.
- Prior to 1.92, font data only needs to be available during the
- Removed
ImFontConfig::PixelSnapVadded in 1.92 which turns out is unnecessary (and was mis-documented). Post-rescaleGlyphOffsetis always rounded.
- Popups: changed compile-time
ImGuiPopupFlags popup_flags = 1default value to be= 0forBeginPopupContextItem(),BeginPopupContextWindow(),BeginPopupContextVoid(),OpenPopupOnItemClick().
The default value has same meaning before and after. (#9157, #9146)- Before this version, those functions had a '
ImGuiPopupFlags popup_flags = 1default value in their function signature. This was introduced by a change on 2020/06/23 (1.77) while changing the signature fromint mouse_buttontoImGuiPopupFlags popup_flagsand trying to preserve then-legacy behavior. - We have now changed this behavior to: cleanup a very old API quirk, facilitate use by bindings, and to remove the last and error-prone non-zero default value. Also because we deemed it extremely rare to use those helper functions with the Left mouse button!
As using the LMB would generally be triggered via another widget, e.g. aButton()+ aOpenPopup()/BeginPopup()call. - Before: The default = 1 means
ImGuiPopupFlags_MouseButtonRight.
Explicitly passing a literal 0 meansImGuiPopupFlags_MouseButtonLeft. - After: The default = 0 means
ImGuiPopupFlags_MouseButtonRight.
Explicitly passing a literal 1 also meansImGuiPopupFlags_MouseButtonRight.
(if legacy behavior are enabled) or will assert (if legacy behavior are disabled). - TL;DR: if you don't want to use right mouse button for popups, always specify it
explicitly using a namedImGuiPopupFlags_MouseButtonXXXXvalue. - Recap:
- Before this version, those functions had a '
BeginPopupContextItem("foo"); // Behavior unchanged (use Right button)
BeginPopupContextItem("foo", ImGuiPopupFlags_MouseButtonLeft); // Behavior unchanged (use Left button)
BeginPopupContextItem("foo", ImGuiPopupFlags_MouseButtonLeft | xxx); // Behavior unchanged (use Left button + flags)
BeginPopupContextItem("foo", ImGuiPopupFlags_MouseButtonRight | xxx); // Behavior unchanged (use Right button + flags)
BeginPopupContextItem("foo", 1); // Behavior unchanged (as a courtesy we legacy interpret 1 as ImGuiPopupFlags_MouseButtonRight, will assert if disabling legacy behaviors.
BeginPopupContextItem("foo", 0); // !! Behavior changed !! Was Left button. Now will defaults to Right button! --> Use ImGuiPopupFlags_MouseButtonLeft.
BeginPopupContextItem("foo", ImGuiPopupFlags_NoReopen); // !! Behavior changed !! Was Left button + flags. Now will defaults to Right button! --> Use ImGuiPopupFlags_MouseButtonLeft | xxx.- Commented out legacy names obsoleted in 1.90 (Sept 2023):
BeginChildFrame()-->BeginChild()withImGuiChildFlags_FrameStyleflag.EndChildFrame()-->EndChild().ShowStackToolWindow()-->ShowIDStackToolWindow().IM_OFFSETOF()...
v1.92.5
v1.92.5 🪩
❤️ Last year was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Language Bindings & Engine Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to recent years sponsors ❤️
Thanks to new sponsors:
And:
- Asobo Studio !
- BeamNG !
- G3Dvu !
- Gravity Well !
- Lucid Games !
- MachineGames !
- Mobigame !
- OTOY !
- Planestate Software !
- Riot Games !
- SCS Software !
- Scorewarrior !
- Sebastian Schöner !
- Sofistik !
- Supercell !
- Tanius Technology !
- Valve !
- Vector Unit !
- and maybe some anonymous ones.
❤️ And many individuals ❤️
Thanks to Adam B, Daniel C, Geoffrey E, Israelle W, Jean-Sebastien R, Jonathan G, Karl H, Liam W, Lucas G, Martin G, Mathieu W, Minh D L, Nicholas C, Peter R, Simon V B ! Also thanks to @GamingMinds-DanielC, @pthom, & more for their help with GitHub answers!
🎤 Embarrassment time 🎤
Wookash Podcast had me recently, if you think you can handle two hours of me rambling confusedly!
https://www.youtube.com/watch?v=2KPUMvyUMzM.
New/Recent Useful Third-Party Extensions
- ImReflect: Reflection-based ImGui wrapper: https://github.com/Sven-vh/ImReflect
- ImHTML: Render HTML in ImGui: https://github.com/BigJk/ImHTML
- imgui-module: C++20 module binding for ImGui. https://github.com/stripe2933/imgui-module
Also check the Useful Extensions/Widgets page for a full list.
Changes (since v1.92.4)
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ? You can read the recently improved docs/BACKENDS.md.
TL;DR;
- Single-axis auto-sizing fixes.
- Tables fixes.
- InputText fixes.
- Keyboard navigation fixes.
- WebGPU backend/examples up to date with latest Emscripten, native DAWN, native WGPU changes.
- & much more.
Breaking Changes
- Keys: commented out legacy names which were obsoleted in 1.89.0 (August 2022).
ImGuiKey_ModCtrl-->ImGuiMod_Ctrl,ImGuiKey_ModShift-->ImGuiMod_Shift,ImGuiKey_ModAlt-->ImGuiMod_Alt,ImGuiKey_ModSuper-->ImGuiMod_Super.
- IO: commented out legacy
io.ClearInputCharacters()obsoleted in 1.89.8 (Aug 2023). Usingio.ClearInputKeys()is enough. - BeginChild: commented out legacy names which were obsoleted in 1.90.0 (Nov 2023), 1.90.9 (July 2024), 1.91.1 (August 2024). (#462, #7687)
ImGuiChildFlags_Border-->ImGuiChildFlags_BordersImGuiWindowFlags_NavFlattened-->ImGuiChildFlags_NavFlattened(moved toImGuiChildFlags!).ImGuiWindowFlags_AlwaysUseWindowPadding-->ImGuiChildFlags_AlwaysUseWindowPadding(moved toImGuiChildFlags!).
- So TL;DR;
BeginChild(name, size, 0, ImGuiWindowFlags_NavFlattened)-->BeginChild(name, size, ImGuiChildFlags_NavFlattened, 0)BeginChild(name, size, 0, ImGuiWindowFlags_AlwaysUseWindowPadding)-->BeginChild(name, size, ImGuiChildFlags_AlwaysUseWindowPadding, 0)
- Commented out legacy
SetItemAllowOverlap()obsoleted in 1.89.7: this never worked right. UseSetNextItemAllowOverlap()before item instead.
Other Changes
- Windows:
- Config flag
io.ConfigWindowsMoveFromTitleBarOnlyis now latched duringBegin(), effectively allowing to change the value on a per-window basis (although there is a better internal mechanism for it). - Fixed single-axis auto-sizing (via double-clicking a border or passing 0.0f on one axis of
SetNextWindowSize()call) to take account of remaining scrollbar on the other axis. (#9060) - Fixed an issue where repeated calls to
SetNextWindowSize()using 0.0f to auto-size on a given axis would keep marking ini settings as dirty.
- Config flag
- Tables:
- Fixed a bug where nesting
BeginTable()->Begin()->BeginTable()would result in temporarily incorrect state, which would lead to bugs to side effects in various locations, e.g.GetContentRegionAvail()calls or using clipper.EndTable()was mistakenly restoring a wrong current table. (#9005) - Angled headers: fixed an auto-resize feedback loop that could affect tables with empty non-resizing columns using angled headers, making them typically flicker back and forth between +0 and +1 pixels.
- Fixed a bug where nesting
- Disabled: fixed a bug when a previously enabled item that got nav focus and then turns disabled could still be activated using keyboard. (#9036)
- InputText:
- When buffer is not resizable, trying to paste contents that cannot fit will now truncate text to nearest UTF-8 codepoint boundaries, instead of completely ignoring the paste. (#9029)
- Avoid continuously overwriting ownership of
ImGuiKey_Enter/ImGuiKey_KeypadEnterkeys in order to allow e.g. external Shortcut override behavior. (#9004) - When using a callback to reduce/manipulate the value of
BufTextLen, we do not require anymore thatCursorPosbe clamped by user code. (#9029) - Fixed an assert when using
ImGuiInputTextFlags_ReadOnlyand making underlying contents shorter while text is selected. (#9069, #3237) (regression from 1.92.3) - InputTextMultiline: fixed a crash when using
ImGuiInputTextFlags_WordWrapand resizing the parent window while keeping the multi-line field active (which is most typically achieved when resizing programmatically or via a docking layout reacting to a platform window resize). (#3237, #9007) [@anton-kl, @ocornut]
- Nav:
- Reworked PageUp/PageDown logic to pick same-page top/bottom page based on inner rectangle rather than clipping rectangle, ensuring consistent (but occasionally less practical) navigation result when a window is partially out of screen. (#787)
- Improved/clarified behavior when requesting PageUp/PageDown from a focused item which is outside of visible boundaries: now ends up one page away from focused item. (#9079)
- Clipper: fixed an issue when using up/down from an item outside of visible bound and using the clipper. (#9079)
- Fonts:
- Calling
ImFontAtlas::Clear()mid-frame without re-adding a font will lead to a more explicit crash.
- Calling
- Textures:
- Fixed an issue preventing multi-contexts from using each others' fonts if context 2 runs after context 1's Render() function. (#9039)
- MultiSelect: added
ImGuiMultiSelectFlags_NoSelectOnRightClickto disable default right-click processing, which selects item on mouse down and is designed for context-menus. (#8200, #9015) - Groups: fixed an issue reporting
IsItemEdited()signal afterEndGroup()when triggered by some widgets e.g. Checkbox(), Selectable() and many others, which cleared ActiveId at the same time as editing. Note thatIsItemDeactivatedAfterEdit()was not affected, onlyIsItemEdited(). (#9028) - Misc: standardized casing of keyboard mods in comments and demo, showing as e.g.
"Ctrl"instead of"CTRL". - CI: Added Dear ImGui Test Suite to CI builds. [@rokups]
- Drag and Drop:
- Added
ImGuiDragDropFlags_AcceptDrawAsHoveredto make accepting item render as hovered, which can allow using e.g. Button() as drop target. (#8632) - Pressing Escape while carrying a payload automatically cancel the active drag and drop. (#9071)
- Style: added
ImGuiCol_DragDropTargetBg,style.DragDropTargetRounding,style.DragDropTargetBorderSizeandstyle.DragDropTargetPaddingto configure the drop target highlight. (#9056) [@aaronkirkham]
- Added
- Demo: About Box: emit infos to convey when IM_ASSERT() macro is disabled, (1) so users don't miss out on programming errors being repor...
v1.92.4
v1.92.4 ~
❤️ Last year was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to recent years sponsors ❤️
New studio enters!
- Thatgamecompany ! 🌻
And usual supporters:
- Asobo Studio !
- BeamNG !
- G3Dvu !
- Gravity Well !
- Lucid Games !
- MachineGames !
- Mobigame !
- OTOY !
- Planestate Software !
- Riot Games !
- SCS Software !
- Scorewarrior !
- Sebastian Schöner !
- Sofistik !
- Supercell !
- Tanius Technology !
- Valve !
- Vector Unit !
- and maybe some anonymous ones.
❤️ And many individuals ❤️
Thanks to Adam B, Daniel C, Geoffrey E, Israelle W, Jean-Sebastien R, Jonathan G, Karl H, Liam W, Lucas G, Martin G, Mathieu W, Minh D L, Nicholas C, Peter R, Simon V B ! Also thanks to @pthom, @GamingMinds-DanielC, @PathogenDavid & more for their help with GitHub answers!
Changes (since v1.92.3)
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ?
You can read the newly improved docs/BACKENDS.md.
Breaking Changes
- Backends:
- TreeNode, Selectable, Clipper: commented out legacy names obsoleted in 1.89.7 (July 2023) and 1.89.9 (Sept 2023):
ImGuiTreeNodeFlags_AllowItemOverlap-->ImGuiTreeNodeFlags_AllowOverlap
ImGuiSelectableFlags_AllowItemOverlap-->ImGuiSelectableFlags_AllowOverlap
ImGuiListClipper::IncludeRangeByIndices()-->ImGuiListClipper::IncludeItemsByIndex() - Vulkan: moved some fields in
ImGui_ImplVulkan_InitInfo:
init_info.RenderPass-->init_info.PipelineInfoMain.RenderPass
init_info.Subpass-->init_info.PipelineInfoMain.Subpass
init_info.MSAASamples-->init_info.PipelineInfoMain.MSAASamples
init_info.PipelineRenderingCreateInfo-->init_info.PipelineInfoMain.PipelineRenderingCreateInfo
It makes things more consistent and was desirable to introduce new settings for secondary viewports. (#8946, #8110, #8111, #8686) [@ocornut, @SuperRonan, @sylmroz] - Vulkan: renamed
ImGui_ImplVulkan_MainPipelineCreateInfo-->ImGui_ImplVulkan_PipelineInfo(introduced very recently and only used byImGui_ImplVulkan_CreateMainPipeline()so it should not affect many users). (#8110, #8111) - Vulkan: helper
ImGui_ImplVulkanH_CreateOrResizeWindow()added aVkImageUsageFlags image_usageargument. It was previously hardcoded toVK_IMAGE_USAGE_COLOR_ATTACHMENT_BITand defaults to that when the value is 0. In theory the function is an internal helper but since it's used by our examples some may have used it. (#8946, #8111, #8686)
- TreeNode, Selectable, Clipper: commented out legacy names obsoleted in 1.89.7 (July 2023) and 1.89.9 (Sept 2023):
Other Changes
- Windows: added lower-right resize grip on child windows using both
ImGuiChildFlags_ResizeXandImGuiChildFlags_ResizeYflags. (#8501) [@aleksijuvani] The grip is not visible before hovering to reduce clutter. - Style: added
ImGuiCol_UnsavedMarker, color of the unsaved document marker when usingImGuiWindowFlags_UnsavedDocument/ImGuiTabItemFlags_UnsavedDocument. (#8983) - IO: added
ImGuiPlatformIO::ClearPlatformHandlers(),ClearRendererHandlers()helpers to null all handlers. (#8945, #2769) - Inputs:
- Shortcuts: added support for combining
ImGuiInputFlags_RouteFocused(which is the default route) withImGuiInputFlags_RouteOverActive, allowing to steal shortcuts from active item without using global routing. (#9004)
- Shortcuts: added support for combining
- InputText:
- Fixed single-line
InputText()not applying fine character clipping properly (regression in 1.92.3). (#8967) [@Cyphall] - Fixed an infinite loop error happening if a custom input text callback modifies/clear
BufTextLenbefore callingInsertChars().
(regression from 1.92.3). Note that this never really worked correctly, but previously it would only temporary wreck cursor position, and since 1.92.3 it would go in an infinite loop. (#8994, #3237)
- Fixed single-line
- Textures:
- Fixed a crash if texture status is set to
ImTextureStatus_WantDestroyby a backend after it had already been destroyed. This would typically happen when callingImGui_ImplXXXX_InvalidateDeviceObjects()helpers twice in a row. (#8977, #8811) - Allowed backend to destroy texture while inside the
NewFrame/EndFramescope. Basically if a backend decide to destroy a texture that we didn't request to destroy (for e.g. freeing resources) the texture is immediately set to aImTextureStatus_WantCreatestatus again. (#8811) - Fixed an issue preventing multi-contexts sharing a
ImFontAtlasfrom being possible to destroy in any order. - Fixed not updating
ImTextureData'sRefCountwhen destroying a context using a sharedImFontAtlas, leading standard backends to not properly free texture resources. (#8975) [@icrashstuff]
- Fixed a crash if texture status is set to
- Demo: fixed layout issue in
"Layout & Scrolling -> Scrolling"section. - Misc: Relaxed internal assert in
MarkItemEdited()to allow for more use cases. (#8997) - Misc: Debuggers: added type formatters for the LLDB debuggers (e.g. Xcode, Android Studio & more) to provide nicer display for ImVec2, ImVec4, ImVector etc. See misc/debuggers/ for details. (#8950) [@mentlerd]
- CI: updated Windows CI scripts to generate/use VulkanSDK. (#8925, #8778) [@yaz0r]
- Docs: updated FAQ with new "What is the difference between Dear ImGui and traditional UI toolkits?" entry. (#8862)
- Backends:
- All backends call
ImGuiPlatformIO::ClearPlatformHandlers()andClearRendererHandlers()on shutdown, so as not to leave function pointers which may be dangling when using backend in e.g. DLL. (#8945, #2769) - DirectX12: reuse a command list and allocator for texture uploads instead of recreating them each time. (#8963, #8465) [@RT2Code]
- DirectX12: Rework synchronization logic. (#8961) [@RT2Code] (presumably fixes old hard-to-repro crash issues such as #3463, #5018).
- DirectX12: Reuse texture upload buffer and grow it only when necessary. (#9002) [@RT2Code]
- DirectX12: Enable swapchain tearing if available. (#8965) [@RT2Code]
- OpenGL3: fixed GL loader to work on Haiku OS which does not support
RTLD_NOLOAD. (#8952) [@Xottab-DUTY, @threedeyes] - GLFW: fixed build on platform that are neither Windows, macOS or known Unixes (Regression in 1.92.3). (#8969, #8920, #8921) [@oktonion]
- SDL2,SDL3: avoid using the
SDL_GetGlobalMouseState()path when one of our window is hovered, as the event data is reliable and enough in this case. - Win32: minor optimization not submitting gamepad io again if XInput's
dwPacketNumberhas not changed. (#8556) [@MidTerm-CN] - Vulkan: added a way to specify custom shaders by filling init fields
CustomShaderVertCreateInfoandCustomShaderFragCreateInfo. (#8585, #8271) [@johan0A] - DX9,DX10,DX11,DX12,Metal,Vulkan,WGPU,SDLRenderer2,SDLRenderer3: ensure that a texture in
ImTextureStatus_WantDestroystate always turn to ImTextureStatus_Destroyed even if your underlying graphics data was already destroyed. (#8977)
- All backends call
- Examples:
Changes from 1.92.3 to 1.92.4 ...
v1.92.3
v1.92.3: Autumn is looming ~
❤️ Last year was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to recent years sponsors ❤️
- Aras P !
- Asobo Studio !
- BeamNG !
- FUTO !
- G3Dvu !
- Gravity Well !
- id Software !
- Lucid Games !
- MachineGames !
- Mobigame !
- OTOY !
- Planestate Software !
- Riot Games !
- SCS Software !
- Scorewarrior !
- Sebastian Schöner !
- Sofistik
- Supercell !
- Tanius Technology !
- Valve !
- Vector Unit
❤️ And many individuals ❤️
Thanks to @pthom, @GamingMinds-DanielC, @PathogenDavid & more for their help with GitHub answers!
Changes (since v1.92.2)
🆘 Need help updating your custom rendering backend to support ImGuiBackendFlags_RendererHasTextures introduced in v1.92.0 ?
You can read the newly improved docs/BACKENDS.md.
Changes
- Fonts: fixed merging a font and specifying a font target in DstFont that's not the last added font (regression in 1.92). (#8912)
- Fonts: fixed an assertion failure when a rectangle entry has been reused 1024 times (e.g. due to constant change of font size). (#8906) [@cfillion]
- Clipper, Tables: added
ImGuiListClipperFlags_NoSetTableRowCountersas a way to disable the assumption that 1 clipper item == 1 table row, which breaks when e.g. using clipper with ItemsHeight=1 in order to clip in pixel units. (#8886) - Scrollbar, Style: added configurable
style.ScrollbarPaddingvalue and correspondingImGuiStyleVar_ScrollbarPaddingenum, instead of an hard-coded computed default. (#8895) - Nav: fixed Ctrl+Tab window appearing as empty when the sole active and focused window has the
ImGuiWindowFlags_NoNavFocusflag. (#8914) - Nav: fixed a crash that could occur when opening a popup following the processing of a global shortcut while no windows were focused.
- Bullet: fixed tessellation which looked out of place in very large sizes.
- InputText: added
ImGuiInputTextFlags_WordWrapflag to word-wrap multi-line buffers. (#3237, #952, #1062, #7363). Current caveats:- This is marked as beta because not being tested enough. Please report any incorrect cursor movement, selection behavior etc. bug to #3237.
- Wrapping style is not ideal. Wrapping of long words/sections (e.g. words larger than total available width) may be particularly unpleasing.
- Wrapping width needs to always account for the possibility of a vertical scrollbar.
- It is currently much slower than regular text fields:
- Ballpark estimate of cost on my 2019 desktop PC: For a 100 KB text buffer: +~0.3 ms/+~1.0 ms (Optimized vs Debug builds).
- The CPU cost is very roughly proportional to text length, so a 10 KB buffer should cost about ten times less.
- InputText, InputInt, InputFloat: fixed an issue where using Escape to revert would not write back the reverted value during the
IsItemDeactivatedAfterEdit()frame if the provided input buffer doesn't store temporary edits. (regression in 1.91.7) (#8915, #8273) - InputText: fixed an issue where using Escape with
ImGuiInputTextFlags_EscapeClearsAllwould not write back the cleared value during theIsItemDeactivatedAfterEdit()frame if the provided input buffer doesn't store temporary edits. (#8915, #8273) - InputText: allow passing an empty string with
buf_size==0. In theory the buffer size should always account for a zero-terminator, but idioms such as usingInputTextMultiline()withImGuiInputTextFlags_ReadOnlyto display a text blob are facilitated by allowing this. (#8907) - InputText: refactored internals to simplify and optimizing rendering of selection. Very large selection (e.g. 1 MB) now take less overhead.
- InputText: revert a change in 1.79 where pressing Down or PageDown on the last line of a multi-line buffer without a trailing carriage return would keep the cursor unmoved. We revert back to move to the end of line in this situation.
- InputText: fixed pressing End (without Shift) in a multi-line selection from mistakenly moving cursor based on selection start.
- Focus, InputText: fixed an issue where
SetKeyboardFocusHere()did not work onInputTextMultiline()fields withImGuiInputTextFlags_AllowTabInput, since they normally inhibit activation to allow tabbing through multiple items. (#8928) - Selectable: added
ImGuiSelectableFlags_SelectOnNavto auto-select an item when moved into, unless Ctrl is held. (automatic when in a BeginMultiSelect() block). - TabBar: fixed an issue were forcefully selecting a tab using internal API would be ignored on first/appearing frame before tabs are submitted (#8929, #6681)
- DrawList: fixed
ImDrawList::CloneOutput()unnecessarily taking a copy of theImDrawListSharedDatapointer, which could to issue when deleting the cloned list. (#8894, #1860) - DrawList: made
AddCallback()assert when passing a null callback. - Debug Tools: ID Stack Tool: fixed using fixed-size buffers preventing long identifiers from being displayed in the tool. (#8905, #4631)
- Debug Tools: ID Stack Tool: when ### is used, noncontributing prefix before the ### is now skipped. (#8904, #4631)
- Debug Tools: ID Stack Tool: added option to hex-encode non-ASCII characters in output path. (#8904, #4631)
- Debug Tools: ID Stack Tool: fixed a crash when using
PushOverrideID(0)during a query. (#8937, #4631) - Debug Tools: Fixed assertion failure when opening a combo box while using
io.ConfigDebugBeginReturnValueOnce/io.ConfigDebugBeginReturnValueLoop. (#8931) [@harrymander] - Demo: tweaked
ShowFontSelector()andShowStyleSelector()to update selection while navigating. - CI: Updates Windows CI to use a more recent VulkanSDK. (#8925, #8778) [@yaz0r]
- Examples: Android: Android+OpenGL3: update Gradle project (#8888, #8878) [@scribam]
- Examples: GLFW+OpenGL2, GLFW+Vulkan, GLFW+Metal, Win32+Vulkan: Fixed not applying content scale consistently with other examples. (#8921, #8756)
- Backends: GLFW: distinguish X11 vs Wayland to fix various scaling issues. (#8920, #8921) [@TheBrokenRail, @pthom, @ocornut]
- Window/monitor content scales are always reported as 1.0 on Wayland.
- Framebuffer scales are always reported as 1.0 on X11.
- Backends: SDL2: window/monitor content scales are always reported as 1.0 on Wayland. (#8920, #8921) [@TheBrokenRail, @pthom, @ocornut]
- Backends: SDL3: use
SDL_GetWindowDisplayScale()on Mac to obtainDisplayFrameBufferScale, fixing incorrect values during resolution changes e.g. going fullscreen. (#8703, #4414) [@jclounge] - Backends: SDL_GPU: Added
ImGui_ImplSDLGPU3_InitInfo::SwapchainCompositionandPresentModeto configure how secondary viewports are created. Currently only used multi-viewport mode. (#8892) [@PTSVU] - Backends: Vulkan: added
ImGui_ImplVulkan_CreateMainPipeline()to recreate pipeline without reinitializing backend. (#8110, #8111) [@SuperRonan]
Changes from 1.92.2 to 1.92.3 specific to the Docking+Multi-Viewports branch:
- DPI: fixed
io.ConfigDpiScaleFontsfrom ever working since 1.92 (the irony being that it is when it started to make sense!). As a reminder, the option automatically copy the current viewport's DpiScale tostyle.FontScaleDpi. This is why we separated thestyle.FontScaleMainandstyle.FontScaleDpiscaling factor, as the later is meant to be overwritten. (#8832, #8465) - DPI: Fixed obsoleted
ImGuiConfigFlags_DpiEnableScaleFonts/_DpiEnableScaleViewportsnames from setting the equivalent `io.ConfigDpiScaleFo...
v1.92.2b
v1.92.2b: Hotfix for 1.92.2
Changes (since v1.92.2)
This is a hot fix for v1.92.2 which has issues with using IsItemHovered() on disabled items or items with no identifier while clicking on them.
- Fixed
IsItemHovered()failing on disabled items and items that have no identifier (e.g. Text() calls) when holding mouse button. (Regression in 1.92.2). (#8877, #8883) - Made
IsItemHovered()on holding mouse button down on disabled items not leak between items when the window cannot be moved. - Backends: Allegro5: Fixed texture format setup which didn't work on all setups/drivers. (#8770, #8465)
- Backends: Allegro5: Added
ImGui_ImplAllegro5_SetDisplay()function to change current ALLEGRO_DISPLAY, as Allegro applications often need to do that. - Backends: Allegro5: Fixed missing support for
ImGuiKey_PrintScreenunder Windows, as raw Allegro 5 does not receive it.
Also see previous releases details.
Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes.
❤️ Previous summer was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
💰 🙏 Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.


