Skip to content

v1.86

Compare
Choose a tag to compare
@ocornut ocornut released this 22 Dec 15:08
· 1773 commits to master since this release

Happy holidays!
Reading the changelog is a good way to keep up to date with the things Dear ImGui has to offer, and maybe will give you ideas of some features that you've been ignoring until now!


Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues

Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌


Got visual glitches?

If you get visual glitches and incorrect dimming when using CTRL+Tab or Modal Windows:
image
It means your Rendering backend is not honoring the ImDrawCmd::IdxOffset field correctly. Update your standard backend or fix your custom one. See this link about how the e.g. OpenGL2 backend was fixed recently. The issue was not noticeable until now so it is possible your Rendering backend never used the IdxOffset field correctly.

image

Wrong code: during the rendering loop: draw call with idx_buffer, then idx_buffer += cmd->ElemCount after every command.
Correct code: during the rendering loop: draw call with idx_buffer + cmd->IdxOffset

Thank you!

Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests.
Special thanks to @PathogenDavid, @thedmd, for their continued contributions and helping with github answers.

Ongoing work on Dear ImGui is currently financially supported by:

Huge thank you to all past and present supporters!

Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

TL;DR;

  • CTRL+Tab is now available enabled regardless of the ImGuiConfigFlags_NavEnableKeyboard config flag.
  • Fixed issues with window reappearing while a modal is open.
  • Fixes issues with menus and menubars in popups and modals.
  • Various fixes/improvements to gamepad/keyboard navigation.
  • Many improvements to ImGuiListClipper. Can now return non-contiguous ranges over multiple steps. Improvement for very large amount of contents. Fix drag and drop source being clipped when off scrolling.
  • Docking: Honor WindowBG color and borders better when docked + various fixes.
  • Backends: OpenGL3 now has a workaround for multi-viewport leaks when using (buggy?) Intel HD drivers on Windows.
    - Backends: OpenGL2, Allegro5: fixed mishandling of ImDrawCmd::IdxOffset field. If you get visual glitches when using CTRL+Tabs or Modal, update your backend to get the fix.
  • Backends: OSX: Add game controller and better keyboard support.
  • Many other fixes, features and improvements.

PS: previous release 1.85 added the incredibly useful STACK TOOL which we suggest you check out! (Demo>Tools>Stack Tool or via calling ShowStackToolWindow()).

Breaking Changes

(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

  • Removed CalcListClipping() function. Prefer using ImGuiListClipper which can return non-contiguous ranges. Please open an issue if you think you really need this function. (#3841)
  • Backends: OSX: Added NSView* parameter to ImGui_ImplOSX_Init(). (#4759) [@stuartcarnie]
  • Backends: Marmalade: Removed obsolete Marmalade backend (imgui_impl_marmalade.cpp) + example app. (#368, #375) Find last supported version at https://github.com/ocornut/imgui/wiki/Bindings

Other Changes

  • Added an assertion for the common user mistake of using "" as an identifier at the root level of a window instead of using "##something". Empty identifiers are valid and useful in a very small amount of cases, but 99.9% of the time if you need an empty label you should use "##something". (#1414, #2562, #2807, #4008, #4158, #4375, #4548, #4657, #4796). READ THE FAQ ABOUT HOW THE ID STACK WORKS > https://dearimgui.org/faq
  • Added GetMouseClickedCount() function, returning the number of successive clicks (so IsMouseDoubleClicked(ImGuiMouseButton_Left) is same as GetMouseClickedCount(ImGuiMouseButton_Left) == 2, but it allows testing for triple clicks and more). (#3229) [@kudaba]
  • Modals: fixed issue hovering popups inside a child inside a modal. (#4676, #4527)
  • Modals, Popups, Windows: changes how appearing windows are interrupting popups and modals. (#4317) [@rokups]
    • appearing windows created from within the begin stack of a popup/modal will no longer close it.
    • appearing windows created not within the begin stack of a modal will no longer close the modal, and automatically appear behind it.
  • Fixed IsWindowFocused()/IsWindowHovered() issues with child windows inside popups. (#4676)
  • Nav: Ctrl+tabbing to cycle through windows is now enabled regardless of using the ImGuiConfigFlags_NavEnableKeyboard configuration flag. This is part of an effort to generalize the use of keyboard inputs. (#4023, #787). Note that while this is active you can also moving windows (with arrow) and resize (shift+arrows).
  • Nav: tabbing now cycles through clipped items and scroll accordingly. (#4449)
  • Nav: pressing PageUp/PageDown/Home/End when in Menu layer automatically moves back to Main layer.
  • Nav: fixed resizing window from borders setting navigation to Menu layer.
  • Nav: prevent child from clipping items when using _NavFlattened and parent has a pending request.
  • Nav: pressing Esc to exit a child window reactivates the Nav highlight if it was disabled by mouse.
  • Nav: with ImGuiConfigFlags_NavEnableSetMousePos enabled: Fixed absolute mouse position when using Home/End leads to scrolling. Fixed not setting mouse position when a failed move request (e.g. when already at edge) reactivates the navigation highlight.
  • Menus: fixed closing a menu inside a popup/modal by clicking on the popup/modal. (#3496, #4797)
  • Menus: fixed closing a menu by clicking on its menu-bar item when inside a popup. (#3496, #4797) [@xndcn]
  • Menus: fixed menu inside a popup/modal not inhibiting hovering of items in the popup/modal. (#3496, #4797)
  • Menus: fixed sub-menu items inside a popups from closing the popup.
  • Menus: fixed top-level menu from not consistently using style.PopupRounding. (#4788)
  • InputText, Nav: fixed repeated calls to SetKeyboardFocusHere() preventing to use InputText(). (#4682)
  • Inputtext, Nav: fixed using SetKeyboardFocusHere() on InputTextMultiline(). (#4761)
  • InputText: made double-click select word, triple-line select line. Word delimitation logic differs slightly from the one used by CTRL+arrows. (#2244)
  • InputText: fixed ImGuiInputTextFlags_ReadOnly flag preventing callbacks from receiving the text buffer. (#4762) [@actondev]
  • InputText: fixed Shift+Delete from not cutting into clipboard. (#4818, #1541) [@corporateshark]
  • InputTextMultiline: fixed incorrect padding when FrameBorder > 0. (#3781, #4794)
  • InputTextMultiline: fixed vertical tracking with large values of FramePadding.y. (#3781, #4794)
  • Separator: fixed cover all columns while called inside a table. (#4787)
  • Clipper: currently focused item is automatically included in clipper range. Fixes issue where e.g. drag and dropping an item and scrolling ensure the item source location is still submitted. (#3841, #1725) [@GamingMinds-DanielC, @ocornut]
  • Clipper: added ForceDisplayRangeByIndices() to force a given item (or several) to be stepped out during a clipping operation. (#3841) [@@GamingMinds-DanielC]
  • Clipper: rework so gamepad/keyboard navigation doesn't create spikes in number of items requested by the clipper to display. (#3841)
  • Clipper: fixed content height declaration slightly mismatching the value of when not using a clipper (an additional ItemSpacing.y was declared, affecting scrollbar range).
  • Clipper: various and incomplete changes to tame down scrolling and precision issues on very large ranges. Passing an explicit height to the clipper now allows larger ranges. (#3609, #3962).
  • Clipper: fixed invalid state when number of frozen table row is smaller than ItemCount.
  • Drag and Drop: BeginDragDropSource() with ImGuiDragDropFlags_SourceAllowNullID doesn't lose tooltip when scrolling. (#143)
  • Fonts: fixed infinite loop in ImFontGlyphRangesBuilder::AddRanges() when passing UINT16_MAX or UINT32_MAX without the IMGUI_USE_WCHAR32 compile-time option. (#4802) [@SlavicPotato]
  • Metrics: Added a node showing windows in submission order and showing the Begin() stack.
  • Misc: Added missing ImGuiMouseCursor_NotAllowed cursor for software rendering (when the io.MouseDrawCursor configuration flag is enabled). (#4713) [@nobody-special666]
  • Misc: Fixed software mouse cursor being rendered multiple times if Render() is called more than once.
  • Misc: Fix MinGW DLL build issue (when IMGUI_API is defined). [@rokups]
  • CI: Add MinGW DLL build to test suite. [@rokups]
  • Backends: Vulkan: Call vkCmdSetScissor() at the end of render with a full viewport to reduce likehood of issues with people using VK_DYNAMIC_STATE_SCISSOR in their app without calling vkCmdSetScissor() explicitly every frame. (#4644)
  • Backends: OpenGL3: Using buffer orphaning + glBufferSubData(), seems to fix leaks with multi-viewports with some Intel HD drivers, and perhaps improve performances. (#4468, #4504, #2981, #3381) [@parbo]
  • Backends: OpenGL2, Allegro5, Marmalade: Fixed mishandling of the ImDrawCmd::IdxOffset field. This is an old bug, but due to the way we created drawlists, it never had any visible side-effect before. The new code for handling Modal and CTRL+Tab dimming/whitening recently made the bug surface. (#4790)
  • Backends: Win32: Store left/right variants of Ctrl/Shift/Alt mods in KeysDown[] array. (#2625) [@thedmd]
  • Backends: DX12: Fixed DRAW_EMPTY_SCISSOR_RECTANGLE warnings. (#4775)
  • Backends: SDL_Renderer: Added support for large meshes (64k+ vertices) with 16-bit indices, enabling ImGuiBackendFlags_RendererHasVtxOffset in the backend. (#3926) [@rokups]
  • Backends: SDL_Renderer: Fix for SDL 2.0.19+ RenderGeometryRaw() API signature change. (#4819) [@sridenour]
  • Backends: OSX: Generally fix keyboard support. Keyboard arrays indexed using kVK_* codes, e.g. ImGui::IsKeyPressed(kVK_Space). Don't set mouse cursor shape unconditionally. Handle two fingers scroll cancel event. (#4759, #4253, #1873) [@stuartcarnie]
  • Backends: OSX: Add Game Controller support (need linking GameController framework) (#4759) [@stuartcarnie]
  • Backends: WebGPU: Passing explicit buffer sizes to wgpuRenderPassEncoderSetVertexBuffer() and wgpuRenderPassEncoderSetIndexBuffer() functions as validation layers appears to not do what the in-flux specs says. (#4766) [@meshula]

Other branches & Beta features!

Also see previous release notes such as 1.80, 1.81, 1.80, 1.83, 1.84, 1.85.

The Docking and Multi-viewports features are available in the docking branch, they are in beta but actively maintained and being used by many teams already. Your continuous feedback is always appreciated.

Some of changes from 1.85 to 1.86 related to the docking branch (multi-viewport and docking features) include:

  • Docking: Revert removal of io.ConfigDockingWithShift config option (removed in 1.83). (#4643)
  • Docking: Fixed a bug undocking windows docked into a non-visible or _KeepAliveOnly dockspace when unrelated windows submitted before the dockspace have dynamic visibility. (#4757)
  • Docking, Style: Docked windows honor ImGuiCol_WindowBg. (#2700, #2539)
  • Docking, Style: Docked windows honor display their border properly. (#2522)
  • Docking: Fixed incorrectly rounded tab bars for dock node that are not at the top of their dock tree.
  • Docking: Fixed single-frame node pos/size inconsistencies when window stop or start being submitted.
  • Docking: Prevent docking any window created above a popup/modal. (#4317)
  • Viewports: Made it possible to explicitly assign ImGuiWindowClass::ParentViewportId to 0 in order to ensure a window is not parented. Previously this would use the global default (which might be 0, but not always as it would depend on io.ConfigViewportsNoDefaultParent). (#3152, #2871)
  • Viewports: Fixed tooltip in own viewport over modal from being incorrectly dimmed. (#4729)
  • Viewports: Fixed CTRL+TAB highlight outline on docked windows not always fitting in host viewport.
  • Backends: Made it possible to shutdown default Platform Backends before the Renderer backends. (#4656)
  • Disabled: Fixed nested BeginDisabled()/EndDisabled() bug in Docking branch due to bad merge. (#4655, #4452, #4453, #4462)

There's a CMake branch/PR (#1713) if you prefer a traditional CMake integration over registering sources files in your own project. There's a premake5 branch if you prefer Visual Studio projects generated by premake.

Gallery

Below a selection of screenshots from Gallery threads...

@gargakshit "I made a Chip-8 interpreter that has a built in machine state inspector and debugger."
https://github.com/gargakshit/chip-8
Screenshot of the chip-8 interpreter

@martinpetkovski "NST is a nonlinear narrative editor completely done with the stock ImGui docking branch / community widgets".
Here's the official website and the Steam page.
image

Also see thread Using gradients in widgets

@ggerganov "Recently, I needed to make a web-page that allows to interactively explore a tree with a few thousand nodes. I tried various Javascript libraries for rendering hierarchy trees, but nothing was able render the entire tree smoothly enough. Finally, I decided to make the page using Dear ImGui (OpenGL3 + SDL) and port it to WASM with Emscripten. This is the result:
explorer
With this stack, the same app runs both as an executable and also as a web-page. All browsers and devices that I have access to are able to render the page smoothly, without any issues. The source code is mostly in this file - very quick and dirty implementation."

"Hearts of Iron IV" dev blog
https://devtrackers.gg/heartsofiron/p/67fbd64f-dev-diary-a-tech-lead-s-life
c67d7d70979b6153484d9033ba62c3d843f62130

From a course on complex network (University of Valencia)
https://sites.google.com/site/introcomplexnetworks/
FDVEcxRWQAAg5XF

Voxel Editor by @mgerhardy
https://github.com/mgerhardy/engine/releases
FC5AkAlXMAIBCtJ

@aiekick: "NoodlesPlate (offline Shader Editor)"
https://github.com/aiekick/NoodlesPlate
NoodlesPlate_Msvc_x64_N69aImL27C

@ncatlin "rgat is a software reverse engineering tool for generating and visualizing instruction traces"
https://ncatlin.github.io/rgatPages/
imgui_example_gif
It uses ImGui via ImGui.NET and I've really enjoyed how easy it makes it to create custom widgets

@jkunstwald "Custom UI bits and pieces for a renderer/editor"
screen1

Teamfight Tactics (from https://www.upcomer.com/the-three-innovators-how-the-tft-live-balance-team-built-patch-11-24/)
image-14

@phkehl "This is u-blox generation 9 positioning (GNSS) receiver control and analysis tool."
https://github.com/phkehl/ubloxcfg/tree/master/cfggui
screenshot3


PS: Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out today to say hi! See Sponsors page for details.