v1.86
版本发布时间: 2021-12-22 23:08:07
ocornut/imgui最新发布版本:v1.91.3(2024-10-04 21:48:34)
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:
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.
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 usingImGuiListClipper
which can return non-contiguous ranges. Please open an issue if you think you really need this function. (#3841) - Backends: OSX: Added
NSView*
parameter toImGui_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 (soIsMouseDoubleClicked(ImGuiMouseButton_Left)
is same asGetMouseClickedCount(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 useInputText()
. (#4682) - Inputtext, Nav: fixed using
SetKeyboardFocusHere()
onInputTextMultiline()
. (#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()
withImGuiDragDropFlags_SourceAllowNullID
doesn't lose tooltip when scrolling. (#143) - Fonts: fixed infinite loop in
ImFontGlyphRangesBuilder::AddRanges()
when passing UINT16_MAX or UINT32_MAX without theIMGUI_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 theio.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 usingVK_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()
andwgpuRenderPassEncoderSetIndexBuffer()
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 onio.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
@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.
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: 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
From a course on complex network (University of Valencia) https://sites.google.com/site/introcomplexnetworks/
Voxel Editor by @mgerhardy https://github.com/mgerhardy/engine/releases
@aiekick: "NoodlesPlate (offline Shader Editor)" https://github.com/aiekick/NoodlesPlate
@ncatlin "rgat is a software reverse engineering tool for generating and visualizing instruction traces" https://ncatlin.github.io/rgatPages/ 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"
Teamfight Tactics (from https://www.upcomer.com/the-three-innovators-how-the-tft-live-balance-team-built-patch-11-24/)
@phkehl "This is u-blox generation 9 positioning (GNSS) receiver control and analysis tool." https://github.com/phkehl/ubloxcfg/tree/master/cfggui
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.