Hello!
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! 👌
Thank you!
Special thanks to @rokups for their continued work on e.g. regression tests.
Special thanks to @PathogenDavid for helping with github answers. For a treat read the amazing story that unfolded in #4029 !
Ongoing work on Dear ImGui is currently financially supported by:
- Platinum sponsors: Blizzard.
- Also recently supported by Adobe and O-Net Communications (USA).
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;
- This is a general maintenance release.
- Various Keyboard/Gamepad Navigation fixes.
- Various programmatic scrolling fixes.
- Tables share more of their allocations.
- Dozens of other additions, fixes and optimizations.
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.)
- Backends: Obsoleted direct access to
ImDrawCmd::TextureId
in favor of callingImDrawCmd::GetTexID()
. (#3761) [@thedmd]- If you are using official backends from the source tree: you have nothing to do.
- If you copied old backend code or using your own: change access to
draw_cmd->TextureId
todraw_cmd->GetTexID()
.
- Why are we doing this?
- This change will be required in the future when adding support for incremental texture atlas updates.
- Please note this won't break soon, but we are making the change ahead of time.
All Changes
- Scrolling: Fix scroll tracking with e.g.
SetScrollHereX()
/SetScrollHereY()
whenWindowPadding < ItemSpacing
. - Scrolling: Fix scroll snapping on edge of scroll region when both scrollbars are enabled.
- Scrolling: Fix mouse wheel axis swap when using SHIFT on macOS (system already does it). (#4010)
- Window: Fix
IsWindowAppearing()
from returning true twice in most cases. (#3982, #1497, #1061) - Nav: Fixed toggling menu layer while an
InputText()
is active not stealing active id. (#787) - Nav: Fixed pressing Escape to leave menu layer while in a popup or child window. (#787)
- Nav, InputText: Fixed accidental menu toggling while typing non-ascii characters using AltGR. [@rokups] (#370)
- Nav: Fixed using
SetItemDefaultFocus()
on windows with_NavFlattened
flag. (#787) - Nav: Fixed Tabbing initial activation from skipping the first item if it is tabbable through. (#787)
- Nav: Fixed fast CTRL+Tab (where keys are only held for one single frame) from properly enabling the menu layer of target window if it doesn't have other active layers.
- Tables: Expose
TableSetColumnEnabled()
in public api. (#3935) - Tables: Better preserve widths when columns count changes. (#4046)
- Tables: Sharing more memory buffers between tables, reducing general memory footprints. (#3740)
- TabBar: Fixed mouse reordering with very fast movements (e.g. crossing multiple tabs in a single frame and then immediately standing still (would only affect automation/bots). [@rokups]
- Menus: made
MenuItem()
in a menu bar reflect the 'selected' argument with a highlight. (#4128) [@mattelegende] - Drags, Sliders, Inputs: Specifying a NULL format to Float functions default them to
"%.3f"
to be consistent with the compile-time default. (#3922) - DragScalar: Add default value for
v_speed
argument to match higher-level functions. (#3922) [@eliasdaler] - ColorEdit4: Alpha default to 255 (instead of 0) when omitted in hex input. (#3973) [@squadack]
- InputText: Do not filter private unicode codepoints (e.g. icons) when pasted from clipboard. (#4005) [@dougbinks]
- InputText: Align caret/cursor to pixel coordinates. (#4080) [@elvissteinjr]
- InputText: Fixed CTRL+Arrow or OSX double-click leaking the presence of spaces when
ImGuiInputTextFlags_Password
is used. (#4155, #4156) [@michael-swan] - LabelText: Fixed clipping of multi-line value text when label is single-line. (#4004)
- LabelText: Fixed vertical alignment of single-line value text when label is multi-line. (#4004)
- Combos: Changed the combo popup to use a different id to also using a context menu with the default item id. Fixed using
BeginPopupContextItem()
with no parameter after a combo. (#4167) - Popups: Added
OpenPopup(ImGuiID id)
overload to facilitate calling from nested stacks. (#3993, #331) [@zlash] - Tweak computation of
io.Framerate
so it is less biased toward high-values in the first 120 frames. (#4138) - Optimization: Disabling some of MSVC most aggressive Debug runtime checks for some simple/low-level functions
(e.g. ImVec2, ImVector) leading to a 10-20% increase of performances with MSVC "default" Debug settings. - ImDrawList: Add and use SSE-enabled
ImRsqrt()
in place of1.0f / ImSqrt()
. (#4091) [@wolfpld] - ImDrawList: Fixed/improved thickness of thick strokes with sharp angles. (#4053, #3366, #2964, #2868, #2518, #2183) Effectively introduced a regression in 1.67 (Jan 2019), and a fix in 1.70 (Apr 2019) but the fix wasn't actually on par with original version. Now incorporating the correct revert.
- ImDrawList: Fixed
PathArcTo()
regression from 1.82 preventing use of counter-clockwise angles. (#4030, #3491) [@thedmd] - Demo: Improved popups demo and comments.
- Metrics: Added "Fonts" section with same information as available in
"Style Editor">"Fonts"
. - Backends: SDL: Rework global mouse pos availability check listing supported platforms explicitly, effectively fixing mouse access on Raspberry Pi. (#2837, #3950) [@lethal-guitar, @hinxx]
- Backends: Win32: Clearing keyboard down array when losing focus (WM_KILLFOCUS). (#2062, #3532, #3961)
[@1025798851] - Backends: OSX: Fix keys remaining stuck when CMD-tabbing to a different application. (#3832) [@rokups]
- Backends: DirectX9: calling
IDirect3DStateBlock9::Capture()
afterCreateStateBlock()
which appears to workaround/fix state restoring issues. Unknown exactly why so, bit of a cargo-cult fix. (#3857) - Backends: DirectX9: explicitly setting up more graphics states to increase compatibility with unusual non-default states. (#4063)
- Backends: DirectX10, DirectX11: fixed a crash when backing/restoring state if nothing is bound when entering the rendering function. (#4045) [@Nemirtingas]
- Backends: GLFW: Adding bound check in KeyCallback because GLFW appears to send -1 on some setups. [#4124]
- Backends: Vulkan: Fix mapped memory Vulkan validation error when buffer sizes are not multiple of
VkPhysicalDeviceLimits::nonCoherentAtomSize
. (#3957) [@AgentX1994] - Backends: WebGPU: Update to latest specs (Chrome Canary 92 and Emscripten 2.0.20). (#4116, #3632) [@bfierz, @Kangz]
- Backends: OpenGL3: Don't try to read
GL_CLIP_ORIGIN
unless we're OpenGL 4.5. (#3998, #2366, #2186) [@s7jones] - Examples: OpenGL: Add OpenGL ES 2.0 support to modern GL examples. (#2837, #3951) [@lethal-guitar, @hinxx]
- Examples: Vulkan: Rebuild swapchain on
VK_SUBOPTIMAL_KHR
. (#3881) - Examples: Vulkan: Prefer using discrete GPU if there are more than one available. (#4012) [@rokups]
- Examples: SDL2: Link with
shell32.lib
required bySDL2main.lib
since SDL 2.0.12. [#3988] - Examples: Android: Make Android example build compatible with Gradle 7.0. (#3446)
- Docs: Improvements to description of using colored glyphs/emojis. (#4169, #3369)
- Docs: Improvements to minor mistakes in documentation comments (#3923) [@ANF-Studios]
Other branches & Beta features!
Also see previous release notes such as 1.80.
The docking (#2109) and multi-viewports (#1542) 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.82 to 1.83 related to the docking branch (multi-viewport and docking features) include:
- [Breaking] Removed
io.ConfigDockingWithShift
config option. Behavior always equivalent to having the option set to false (dock/undock by default, hold shift to avoid docking). (#2109) - Docking:
DockSpace()
returns its node ID. - Docking:
Dockspace()
never draws a background. (#3924) - Docking: Undocking nodes/windows covering most of the monitor max their size down to 90% to ease manipulations.
- Docking: Docking node tab bar honors
ItemInnerSpacing.x
before first tab. (#4130) - Docking: Tweak rendering and alignment of dock node menu marker. (#4130)
- Docking: Fixed restoring of tab order within a dockspace or a split node.
- Docking: Fixed reappearing docked windows with no close button showing a tab with extraneous space for one frame.
- Docking: Fixed multiple simultaneously reappearing window from appearing undocked for one frame.
- Viewports: Hotfix for crash in monitor array access, caused by 4b9bc49. (#3967)
- Backends, Viewports: GLFW: Add a workaround for stuck keys after closing a GLFW window (#3837).
- Backends, Viewports: Vulkan: Rebuild swapchain on
VK_SUBOPTIMAL_KHR
. (#3881)
There's a CMake pull-request (#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...
@jarikomppa: Sassy "Audio spreadsheet, or in other words, virtual modular synthesizer using spreadsheet as the user interface."
https://sol-hsa.itch.io/sassy
@Vertver: "ImGui - perfect library with great perfomance and excelent API, and that's why we are using this in our plugin.
Plugin is free, and it's can be downloaded from https://suirless.com"
@slajerek "Retro debugger screenshot"
@Kayzaks "Been using ImGui to create a Designer for Integrated Photonics for a Startup Idea I'm pursuing (Akhetonics). Still in early development though. Have always liked ImGui from my game-dev days, so why not for a more industrial application!"
8th Wall's SLAM system & Omniscope
Blog post: https://www.8thwall.com/blog/post/45697581391/building-the-next-generation-of-slam-for-the-browser
@gboisse "Particles timeline editing with ImGui ✨"
Cafe-Shader-Studio
https://github.com/KillzXGaming/Cafe-Shader-Studio
https://gbatemp.net/threads/cafe-shader-studio.587670
@Moneyl "A modding tool for Red Faction Guerrilla. Started off as a file viewer so it can view maps, textures, and some meshes. So far it can only edit textures. "
PS: 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.