Version 1.92.8

Include minor bits: adjust activeid logging, tweak comments.
This commit is contained in:
ocornut
2026-05-12 15:48:41 +02:00
parent eebaddd340
commit 8936b58fe2
8 changed files with 84 additions and 75 deletions
+56 -52
View File
@@ -36,17 +36,14 @@ HOW TO UPDATE?
- Please report any issue! - Please report any issue!
----------------------------------------------------------------------- -----------------------------------------------------------------------
VERSION 1.92.8 WIP (In Progress) VERSION 1.92.8 (Released 2026-05-12)
----------------------------------------------------------------------- -----------------------------------------------------------------------
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.92.8
Breaking Changes: Breaking Changes:
- DrawList: - DrawList: swapped the last two arguments of `AddRect()`, `AddPolyline()`, `PathStroke()`.
- Obsoleted `ImDrawCallback_ResetRenderState` in favor of using `ImGui::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.
- DrawList: swapped the last two arguments of AddRect(), AddPolyline(), PathStroke().
Recap:
- Before: `void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0, float thickness = 1.0f);` - Before: `void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0, float thickness = 1.0f);`
- After: `void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, float thickness = 1.0f, ImDrawFlags flags = 0);` - After: `void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, float thickness = 1.0f, ImDrawFlags flags = 0);`
- Before: `void ImDrawList::AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness);` - Before: `void ImDrawList::AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness);`
@@ -55,36 +52,40 @@ Breaking Changes:
- After: `void ImDrawList::PathStroke(ImU32 col, float thickness = 1.0f, ImDrawFlags flags = 0);` - After: `void ImDrawList::PathStroke(ImU32 col, float thickness = 1.0f, ImDrawFlags flags = 0);`
Added inline redirection functions when IMGUI_DISABLE_OBSOLETE_FUNCTIONS is off. 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. Marked the old functions are =delete when IMGUI_DISABLE_OBSOLETE_FUNCTIONS is on, to allow for better type-checking.
This is not an easy change but it makes ImDrawList function signatures consistent.
As we are aiming to add flags and features to variety of ImDrawList functions, that consistency will become particularly important.
The new order is also more convenient as `flags` are less frequently used than `thickness` in real code.
Effectively the typical call site is changing from: Effectively the typical call site is changing from:
- Before: `window->DrawList->AddRect(p_min, p_max, color, rounding, ImDrawFlags_None, border_size);` - Before: `window->DrawList->AddRect(p_min, p_max, color, rounding, ImDrawFlags_None, border_size);`
- After: `window->DrawList->AddRect(p_min, p_max, color, rounding, border_size);` - After: `window->DrawList->AddRect(p_min, p_max, color, rounding, border_size);`
Notes: Notes:
- As a general policy in Dear ImGui, all our flags default to 0 so ImDrawFlags_None was likely written 0 in some call sites.
- Users of C++ and other languages with type-checking will be notified at compile-time of any mistakes. - 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. - 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 `flags` are less frequently used than `thickness` in 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_FUNCTIONS` in your imconfig.h, even temporarily, to clean up legacy code. - Consider adding `#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS` in your imconfig.h, even temporarily, to clean up legacy code.
- DrawList: obsoleted `ImDrawCallback_ResetRenderState` in favor of using `ImGui::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: - Backends:
- Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler. (#914) - Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler. (#914)
This change allows us to facilitate changing samplers, in line with other backends. [@yaz0r, @ocornut] This change allows us to facilitate changing samplers, in line with other backends. [@yaz0r, @ocornut]
- When creating your own descriptor pool (instead of letting backend creates its own): - When creating your own descriptor pool (instead of letting backend creates its own):
- Before: need at least IMGUI_IMPL_VULKAN_MINIMUM_IMAGE_SAMPLER_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER. - Before: need at least `IMGUI_IMPL_VULKAN_MINIMUM_IMAGE_SAMPLER_POOL_SIZE` descriptors of type `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER`.
- After: need at least IMGUI_IMPL_VULKAN_MINIMUM_SAMPLED_IMAGE_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE. - After: need at least `IMGUI_IMPL_VULKAN_MINIMUM_SAMPLED_IMAGE_POOL_SIZE` descriptors of type `VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE`.
+ IMGUI_IMPL_VULKAN_MINIMUM_SAMPLER_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLER. + `IMGUI_IMPL_VULKAN_MINIMUM_SAMPLER_POOL_SIZE` descriptors of type `VK_DESCRIPTOR_TYPE_SAMPLER`.
- When registering custom textures: changed ImGui_ImplVulkan_AddTexture() signature to remove Sampler. - When registering custom textures: changed ImGui_ImplVulkan_AddTexture() signature to remove Sampler.
- Before: ImGui_ImplVulkan_AddTexture(VkSampler, VkImageView, VkImageLayout) - Before: `ImGui_ImplVulkan_AddTexture(VkSampler, VkImageView, VkImageLayout)`
- After: ImGui_ImplVulkan_AddTexture(VkImageView, VkImageLayout) - After: `ImGui_ImplVulkan_AddTexture(VkImageView, VkImageLayout)`
- Kept inline redirection function that ignores the sampler (will obsolete). - Kept inline redirection function that ignores the sampler (will obsolete).
- DirectX10, DirectX11, SDLGPU3, Vulkan: removed samplers from ImGui_ImplXXXX_RenderState. - DirectX10, DirectX11, SDLGPU3, Vulkan: removed samplers from `ImGui_ImplXXXX_RenderState`.
Prefer to use backend-agnostic DrawCallback_SetSamplerLinear which works everywhere! (#9378) Prefer to use backend-agnostic DrawCallback_SetSamplerLinear which works everywhere! (#9378)
If there is a legit need/request for them or any render state we can always add them back. If there is a legit need/request for them or any render state we can always add them back.
Other Changes: Other Changes:
- DrawList: - DrawList:
- Added room in ImGuiPlatformIO for standard backend-agnostic draw callbacks. Those callbacks - Added room in `ImGuiPlatformIO` for standard backend-agnostic draw callbacks. Those callbacks
are setup/provided by the backend and available in most of our standard backends. 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 They allow backend-agnostic code from e.g. switching to a Nearest/Point sampler without
messing with custom Renderer-specific callbacks. messing with custom Renderer-specific callbacks.
@@ -94,13 +95,13 @@ Other Changes:
Note that some backends might not support all callbacks. Note that some backends might not support all callbacks.
(#9378, #9371, #3590, #8926, #2973, #7485, #7468, #6969, #5118, #7616, #9173, #8322, #7230, (#9378, #9371, #3590, #8926, #2973, #7485, #7468, #6969, #5118, #7616, #9173, #8322, #7230,
#5999, #6452, #5156, #7342, #7592, #7511) #5999, #6452, #5156, #7342, #7592, #7511)
- Made AddCallback() user data default to Null for convenience. - Made `AddCallback()` user data default to Null for convenience.
- Added AddLineH(), AddLineV() helpers to draw horizontal and vertical lines. [@memononen] - Added `AddLineH()`, `AddLineV()` helpers to draw horizontal and vertical lines. [@memononen]
- InputText: - InputText:
- InputTextMultiline: fixed an issue processing deactivation logic when an active - InputTextMultiline: fixed an issue processing deactivation logic when an active
multi-line edit is clipped due to being out of view. multi-line edit is clipped due to being out of view.
- Fixed a crash when toggling ReadOnly while active. (#9354) - Fixed a crash when toggling ReadOnly while active. (#9354)
- CharFilter callback event sets CursorPos/SelectionStart/SelectionEnd. (#816) - `CharFilter` callback event sets CursorPos/SelectionStart/SelectionEnd. (#816)
- Tables: - Tables:
- Fixed issues reporting ideal size to parent window/container: (#9352, #7651) - Fixed issues reporting ideal size to parent window/container: (#9352, #7651)
- When both scrollbars are visible but only one of ScrollX/ScrollY was explicitly requested. - When both scrollbars are visible but only one of ScrollX/ScrollY was explicitly requested.
@@ -109,43 +110,45 @@ Other Changes:
- Fixed a single-axis auto-resizing feedback loop issue with nested containers - Fixed a single-axis auto-resizing feedback loop issue with nested containers
and varying scrollbar visibility. (#9352) and varying scrollbar visibility. (#9352)
- Detect and report error when calling End() instead of EndPopup() on a popup. (#9351) - Detect and report error when calling End() instead of EndPopup() on a popup. (#9351)
- Child windows with only ImGuiChildFlags_AutoResizeY flag keep using the proportional - Child windows with only `ImGuiChildFlags_AutoResizeY` flag keep using the proportional
default ItemWidth. (#9355) default `ItemWidth`. (#9355)
- Using mouse wheel to scroll takes and keeps ownership of the corresponding keys - Using mouse wheel to scroll takes and keeps ownership of the corresponding keys
(ImGuiKey_MouseWheelX/Y) while a wheeling window is locked. (#2604, #3795) (e.g. `ImGuiKey_MouseWheelY`) while a wheeling window is locked. (#2604, #3795)
- InputInt, InputFloat, InputScalar: reinstated ImGuiInputTextFlags_EnterReturnsTrue - InputInt, InputFloat, InputScalar:
support which was removed in 1.91.4. (#8665, #9299, #8065, #3946, #6284, #9117) - Reinstated `ImGuiInputTextFlags_EnterReturnsTrue` support which was removed in 1.91.4.
- Fixed the fact that it didn't return true when validating same value. (#8665, #9299, #8065, #3946, #6284, #9117)
- Fixed losing value when tabbing out or losing focus. - Fixed the fact that it didn't return true when validating same value.
- Made it that pressing +/- step buttons also return true, which is in line - Fixed losing value when tabbing out or losing focus.
with 1.91.4 behavior. - Made it that pressing +/- step buttons also return true, which is in line
- In a majority of cases you should use IsItemDeactivatedAfterEdit() instead, with 1.91.4 behavior.
but it still has a few edge cases flaws (to be addressed soon). - In a majority of cases you should use `IsItemDeactivatedAfterEdit()` instead,
- InputInt, InputFloat, InputScalar: allow passing a format string that does not display but it still has a few edge cases flaws (to be addressed soon).
the scalar value. Parsing input with default format for the type. (#9385) [@FireFox2000000] - Allow passing a format string that does not display the scalar value.
Parsing input with default format for the type. (#9385) [@FireFox2000000]
- Multi-Select: - Multi-Select:
- Fixed an issue using Multi-Select within a Table causing column width measurement to - Fixed an issue using Multi-Select within a Table causing column width measurement to
be invalid when trailing column contents is not submitted in the last row. (#9341, #8250) be invalid when trailing column contents is not submitted in the last row. (#9341, #8250)
- Fixed an issue using Multi-Select within a Table with the right-most column visible, - Fixed an issue using Multi-Select within a Table with the right-most column visible,
which could lead to an extra vertical offset in the Header row. (#8250) which could lead to an extra vertical offset in the Header row. (#8250)
- Box-Select: fixed an issue using ImGuiMultiSelectFlags_BoxSelect1d mode while scrolling. - Multi-Select + Box-Select:
- Fixed an issue using `ImGuiMultiSelectFlags_BoxSelect1d` mode while scrolling.
Notably, using mouse wheel while holding a box-selection could lead items close to windows Notably, using mouse wheel while holding a box-selection could lead items close to windows
edges from not being correctly unselected. (#7994, #8250, #7821, #7850, #7970) edges from not being correctly unselected. (#7994, #8250, #7821, #7850, #7970)
- Box-Select: improved dirty/unclip rectangle logic for ImGuiMultiSelectFlags_BoxSelect2d. - Improved dirty/unclip rectangle logic for `ImGuiMultiSelectFlags_BoxSelect2d`.
- Box-Select: fixed an issue using ImGuiMultiSelectFlags_BoxSelect2d mode, where - Fixed an issue using `ImGuiMultiSelectFlags_BoxSelect2d` mode, where
items out of view wouldn't be properly selected while scrolling while mouse cursor items out of view wouldn't be properly selected while scrolling while mouse cursor
is hovering outside of selection scope. (#7994, #1861, #6518) is hovering outside of selection scope. (#7994, #1861, #6518)
- Box-Select: fixed an issue where items out of horizontal view would sometimes lead - Fixed an issue where items out of horizontal view would sometimes lead
to incorrect merging of sequential selection requests while also scrolling fast to incorrect merging of sequential selection requests while also scrolling fast
enough to overlap multiple rows during a frame. (#7994, #1861, #6518) enough to overlap multiple rows during a frame. (#7994, #1861, #6518)
- Box-Select: fixed an issue using ImGuiMultiSelectFlags_BoxSelect2d mode in a Table - Fixed an issue using `ImGuiMultiSelectFlags_BoxSelect2d` mode in a Table
while relying on the TableNextColumn() return value to perform coarse clipping. (#7994) while relying on the `TableNextColumn()` return value to perform coarse clipping. (#7994)
- Box-Select: disabled merging consecutive selection requests as we have no reliable - Disabled merging consecutive selection requests as we have no reliable
way of detecting if user has submitted all consecutives items without clipping gaps, way of detecting if user has submitted all consecutive items without clipping gaps,
and ImGuiSelectionUserData is technically opaque storage. (#7994, #1861) and `ImGuiSelectionUserData` is technically opaque storage. (#7994, #1861)
(we will probably bring this back as a minor optimization if we have a way to for (we will probably bring this back as a minor optimization if we have a way to for
user to tell us ImGuiSelectionUserData are indices) user to tell us `ImGuiSelectionUserData` are indices)
- Box-Select: fixes for using accross nested child windows. (#8364) - Fixes for using across nested child windows. (#8364)
- Box-Select + Clipper: fixed an issue selecting items while scrolling while a clipper - Box-Select + Clipper: fixed an issue selecting items while scrolling while a clipper
active. (#7994, #8250, #7821, #7850, #7970) active. (#7994, #8250, #7821, #7850, #7970)
- Box-Select + Tables: fixed an issue using box-selection in a tables with - Box-Select + Tables: fixed an issue using box-selection in a tables with
@@ -156,7 +159,7 @@ Other Changes:
- BeginMenu()/MenuItem(): fixed accidental triggering of child menu items when - BeginMenu()/MenuItem(): fixed accidental triggering of child menu items when
opening a menu inside a small host window forcing the child menu window to be opening a menu inside a small host window forcing the child menu window to be
repositioned under the mouse cursor. (#8233, #9394) repositioned under the mouse cursor. (#8233, #9394)
Done by reworking BeginMenu()/MenuItem(): they previously avoiding taking Done by reworking `BeginMenu()`/`MenuItem()`: they previously avoiding taking
ActiveID + key/click ownership (in order to allow releasing button on another item). ActiveID + key/click ownership (in order to allow releasing button on another item).
Now they take them and release them once the mouse is moved outside item boundaries. Now they take them and release them once the mouse is moved outside item boundaries.
- Inputs: - Inputs:
@@ -168,9 +171,9 @@ Other Changes:
expected while not having item react if a scroll wheel is actively in progress. expected while not having item react if a scroll wheel is actively in progress.
May be subject to further redesign, e.g. conditional flags. Feedback welcome! May be subject to further redesign, e.g. conditional flags. Feedback welcome!
- Style: - Style:
- Checkbox: added ImGuiCol_CheckboxSelectedBg to change or accentuate the - Checkbox: added `ImGuiCol_CheckboxSelectedBg` to change or accentuate the
background color of checked/mixed checkboxes. (#9392) background color of checked/mixed checkboxes. (#9392)
- Added ImGuiStyleVar_DragDropTargetRounding. (#9056) - Added `ImGuiStyleVar_DragDropTargetRounding`. (#9056)
- Fixed vertical scrollbar top coordinates when using thick borders on windows - Fixed vertical scrollbar top coordinates when using thick borders on windows
with no title bar and no menu bar. (#9366) with no title bar and no menu bar. (#9366)
- Fonts: - Fonts:
@@ -183,8 +186,9 @@ Other Changes:
- Tweaked assert triggering when first item height measurement fails, and made it - Tweaked assert triggering when first item height measurement fails, and made it
a better recoverable error. (#9350) a better recoverable error. (#9350)
- Misc: - Misc:
- Minor optimization: reduce redudant label scanning in common widgets. - Minor optimization: reduce redundant label scanning in common widgets.
- Added missing Test Engine hooks for PlotXXX(), VSliderXXX(), TableHeader(). - Added missing Test Engine hooks for `PlotLines()`, `PlotHistogram()`, `VSliderXXX()`
and `TableHeader()` functions.
- Demo: - Demo:
- Added simple demo for a scrollable/zoomable image viewer with a grid. - Added simple demo for a scrollable/zoomable image viewer with a grid.
Available in `Examples->Image Viewer` and `Widgets->Images`. Available in `Examples->Image Viewer` and `Widgets->Images`.
@@ -218,8 +222,8 @@ Other Changes:
- Update VS toolset in all .vcxproj from VS2015 (v140) to VS2017 (v141). The later is the - Update VS toolset in all .vcxproj from VS2015 (v140) to VS2017 (v141). The later is the
first that supports vcpkg. Onward we will likely stop testing building the library with VS2015. first that supports vcpkg. Onward we will likely stop testing building the library with VS2015.
- GLFW+Vulkan, SDL2+Vulkan, SDL3+Vulkan, Win32+Vulkan: reworked to create a descriptor pool with: - GLFW+Vulkan, SDL2+Vulkan, SDL3+Vulkan, Win32+Vulkan: reworked to create a descriptor pool with:
- IMGUI_IMPL_VULKAN_MINIMUM_SAMPLED_IMAGE_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE. - `IMGUI_IMPL_VULKAN_MINIMUM_SAMPLED_IMAGE_POOL_SIZE` descriptors of type `VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE`.
- IMGUI_IMPL_VULKAN_MINIMUM_SAMPLER_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLER. - `IMGUI_IMPL_VULKAN_MINIMUM_SAMPLER_POOL_SIZE` descriptors of type `VK_DESCRIPTOR_TYPE_SAMPLER`.
----------------------------------------------------------------------- -----------------------------------------------------------------------
+14 -13
View File
@@ -1,4 +1,4 @@
// dear imgui, v1.92.8 WIP // dear imgui, v1.92.8
// (main code and documentation) // (main code and documentation)
// Help: // Help:
@@ -396,7 +396,6 @@ IMPLEMENTING SUPPORT for ImGuiBackendFlags_RendererHasTextures:
You can read releases logs https://github.com/ocornut/imgui/releases for more details. You can read releases logs https://github.com/ocornut/imgui/releases for more details.
- 2026/05/07 (1.92.8) - DrawList: swapped the last two arguments of AddRect(), AddPolyline(), PathStroke(). - 2026/05/07 (1.92.8) - DrawList: swapped the last two arguments of AddRect(), AddPolyline(), PathStroke().
Recap:
- Before: void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0, float thickness = 1.0f); - Before: void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0, float thickness = 1.0f);
- After: void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, float thickness = 1.0f, ImDrawFlags flags = 0); - After: void ImDrawList::AddRect(ImVec2 p_min, ImVec2 p_max, ImU32 col, float rounding = 0.0f, float thickness = 1.0f, ImDrawFlags flags = 0);
- Before: void ImDrawList::AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness); - Before: void ImDrawList::AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness);
@@ -405,18 +404,19 @@ IMPLEMENTING SUPPORT for ImGuiBackendFlags_RendererHasTextures:
- After: void ImDrawList::PathStroke(ImU32 col, float thickness = 1.0f, ImDrawFlags flags = 0); - After: void ImDrawList::PathStroke(ImU32 col, float thickness = 1.0f, ImDrawFlags flags = 0);
Added inline redirection functions when IMGUI_DISABLE_OBSOLETE_FUNCTIONS is off. 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. Marked the old functions are =delete when IMGUI_DISABLE_OBSOLETE_FUNCTIONS is on, to allow for better type-checking.
This is not an easy change but it makes ImDrawList function signatures consistent.
As we are aiming to add flags and features to variety of ImDrawList functions, that consistency will become particularly important.
The new order is also more convenient as 'flags' are less frequently used than 'thickness' in real code.
Effectively the typical call site is changing from: Effectively the typical call site is changing from:
- Before: window->DrawList->AddRect(p_min, p_max, color, rounding, ImDrawFlags_None, border_size); - Before: window->DrawList->AddRect(p_min, p_max, color, rounding, ImDrawFlags_None, border_size);
- After: window->DrawList->AddRect(p_min, p_max, color, rounding, border_size); - After: window->DrawList->AddRect(p_min, p_max, color, rounding, border_size);
Notes: Notes:
- As a general policy in Dear ImGui, all our flags default to 0 so ImDrawFlags_None was likely written 0 in some call sites. - Users of C++ and other languages with type-checking will be notified at compile-time of any mistakes.
- Users of C++ and other languages with type-checking should 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. - 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 `flags` are less frequently used than `thickness` in 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_FUNCTIONS` in your imconfig.h, even temporarily, to clean up legacy code. - Consider adding `#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS` in your imconfig.h, even temporarily, to clean up legacy code.
- 2026/04/23 (1.92.8) - Obsoleted `ImDrawCallback_ResetRenderState` in favor of using `ImGui::GetPlatformIO().DrawCallback_ResetRenderState`, which is part of our new standard draw callbacks. (#9378) - 2026/04/23 (1.92.8) - DrawList: obsoleted `ImDrawCallback_ResetRenderState` in favor of using `ImGui::GetPlatformIO().DrawCallback_ResetRenderState`, which is part of our new standard draw callbacks. (#9378)
- 2026/04/22 (1.92.8) - Backends: Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler. - 2026/04/22 (1.92.8) - Backends: Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler.
- When registering custom textures: changed ImGui_ImplVulkan_AddTexture() signature to remove Sampler. - When registering custom textures: changed ImGui_ImplVulkan_AddTexture() signature to remove Sampler.
- When creating your own descriptor pool (instead of letting backend creates its own): need at least IMGUI_IMPL_VULKAN_MINIMUM_SAMPLED_IMAGE_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + IMGUI_IMPL_VULKAN_MINIMUM_SAMPLER_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLER. - When creating your own descriptor pool (instead of letting backend creates its own): need at least IMGUI_IMPL_VULKAN_MINIMUM_SAMPLED_IMAGE_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + IMGUI_IMPL_VULKAN_MINIMUM_SAMPLER_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLER.
@@ -4720,7 +4720,8 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
g.ActiveIdIsJustActivated = (g.ActiveId != id); g.ActiveIdIsJustActivated = (g.ActiveId != id);
if (g.ActiveIdIsJustActivated) if (g.ActiveIdIsJustActivated)
{ {
IMGUI_DEBUG_LOG_ACTIVEID("SetActiveID() old:0x%08X (window \"%s\") -> new:0x%08X (window \"%s\")\n", g.ActiveId, g.ActiveIdWindow ? g.ActiveIdWindow->Name : "", id, window ? window->Name : ""); IMGUI_DEBUG_LOG_ACTIVEID("SetActiveID() 0x%08X in \"%s\"%*s(previously 0x%08X in \"%s\")\n", id, window ? window->Name : "",
ImMax(0, 20 - (int)(window ? strlen(window->Name) : 0)), "", g.ActiveId, g.ActiveIdWindow ? g.ActiveIdWindow->Name : "");
g.ActiveIdTimer = 0.0f; g.ActiveIdTimer = 0.0f;
g.ActiveIdHasBeenPressedBefore = false; g.ActiveIdHasBeenPressedBefore = false;
g.ActiveIdHasBeenEditedBefore = false; g.ActiveIdHasBeenEditedBefore = false;
@@ -5756,7 +5757,7 @@ void ImGui::NewFrame()
g.CurrentWindowStack.resize(0); g.CurrentWindowStack.resize(0);
g.BeginPopupStack.resize(0); g.BeginPopupStack.resize(0);
g.ItemFlagsStack.resize(0); g.ItemFlagsStack.resize(0);
g.ItemFlagsStack.push_back(ImGuiItemFlags_AutoClosePopups); // Default flags g.ItemFlagsStack.push_back(ImGuiItemFlags_Default_); // Default flags
g.CurrentItemFlags = g.ItemFlagsStack.back(); g.CurrentItemFlags = g.ItemFlagsStack.back();
g.GroupStack.resize(0); g.GroupStack.resize(0);
@@ -18360,7 +18361,7 @@ void ImGui::ShowFontSelector(const char* label)
"- Load additional fonts with io.Fonts->AddFontXXX() functions.\n" "- Load additional fonts with io.Fonts->AddFontXXX() functions.\n"
"- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n"
"- Read FAQ and docs/FONTS.md for more details.\n" "- Read FAQ and docs/FONTS.md for more details.\n"
"- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); "- Legacy backend: if you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame().");
} }
#endif // #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) || !defined(IMGUI_DISABLE_DEBUG_TOOLS) #endif // #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) || !defined(IMGUI_DISABLE_DEBUG_TOOLS)
+3 -3
View File
@@ -1,4 +1,4 @@
// dear imgui, v1.92.8 WIP // dear imgui, v1.92.8
// (headers) // (headers)
// Help: // Help:
@@ -29,8 +29,8 @@
// Library Version // Library Version
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345') // (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
#define IMGUI_VERSION "1.92.8 WIP" #define IMGUI_VERSION "1.92.8"
#define IMGUI_VERSION_NUM 19277 #define IMGUI_VERSION_NUM 19280
#define IMGUI_HAS_TABLE // Added BeginTable() - from IMGUI_VERSION_NUM >= 18000 #define IMGUI_HAS_TABLE // Added BeginTable() - from IMGUI_VERSION_NUM >= 18000
#define IMGUI_HAS_TEXTURES // Added ImGuiBackendFlags_RendererHasTextures - from IMGUI_VERSION_NUM >= 19198 #define IMGUI_HAS_TEXTURES // Added ImGuiBackendFlags_RendererHasTextures - from IMGUI_VERSION_NUM >= 19198
+1 -1
View File
@@ -1,4 +1,4 @@
// dear imgui, v1.92.8 WIP // dear imgui, v1.92.8
// (demo code) // (demo code)
// Help: // Help:
+1 -1
View File
@@ -1,4 +1,4 @@
// dear imgui, v1.92.8 WIP // dear imgui, v1.92.8
// (drawing and font code) // (drawing and font code)
/* /*
+3 -1
View File
@@ -1,4 +1,4 @@
// dear imgui, v1.92.8 WIP // dear imgui, v1.92.8
// (internal structures/api) // (internal structures/api)
// You may use this file to debug, understand or extend Dear ImGui features but we don't provide any guarantee of forward compatibility. // You may use this file to debug, understand or extend Dear ImGui features but we don't provide any guarantee of forward compatibility.
@@ -1211,6 +1211,7 @@ struct IMGUI_API ImGuiMenuColumns
}; };
// Internal temporary state for deactivating InputText() instances. // Internal temporary state for deactivating InputText() instances.
// Store as part of ImGuiDeactivatedItemData?
struct IMGUI_API ImGuiInputTextDeactivatedState struct IMGUI_API ImGuiInputTextDeactivatedState
{ {
ImGuiID ID; // widget id owning the text state (which just got deactivated) ImGuiID ID; // widget id owning the text state (which just got deactivated)
@@ -1456,6 +1457,7 @@ struct ImGuiPtrOrIndex
}; };
// Data used by IsItemDeactivated()/IsItemDeactivatedAfterEdit() functions // Data used by IsItemDeactivated()/IsItemDeactivatedAfterEdit() functions
// Also see ImGuiInputTextDeactivatedState which is an extension for this for InputText()
struct ImGuiDeactivatedItemData struct ImGuiDeactivatedItemData
{ {
ImGuiID ID; ImGuiID ID;
+1 -1
View File
@@ -1,4 +1,4 @@
// dear imgui, v1.92.8 WIP // dear imgui, v1.92.8
// (tables and columns code) // (tables and columns code)
/* /*
+5 -3
View File
@@ -1,4 +1,4 @@
// dear imgui, v1.92.8 WIP // dear imgui, v1.92.8
// (widgets code) // (widgets code)
/* /*
@@ -3572,7 +3572,8 @@ bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min,
// - ImParseFormatSanitizeForPrinting() [Internal] // - ImParseFormatSanitizeForPrinting() [Internal]
// - ImParseFormatSanitizeForScanning() [Internal] // - ImParseFormatSanitizeForScanning() [Internal]
// - ImParseFormatPrecision() [Internal] // - ImParseFormatPrecision() [Internal]
// - TempInputTextScalar() [Internal] // - TempInputText() [Internal]
// - TempInputScalar() [Internal]
// - InputScalar() // - InputScalar()
// - InputScalarN() // - InputScalarN()
// - InputFloat() // - InputFloat()
@@ -4583,6 +4584,7 @@ void ImGui::InputTextDeactivateHook(ImGuiID id)
ImGuiInputTextState* state = &g.InputTextState; ImGuiInputTextState* state = &g.InputTextState;
if (id == 0 || state->ID != id) if (id == 0 || state->ID != id)
return; return;
//IMGUI_DEBUG_LOG_ACTIVEID("InputTextDeactivateHook() id = 0x%08X\n", id);
g.InputTextDeactivatedState.ID = state->ID; g.InputTextDeactivatedState.ID = state->ID;
if (state->Flags & ImGuiInputTextFlags_ReadOnly) if (state->Flags & ImGuiInputTextFlags_ReadOnly)
{ {
@@ -4898,7 +4900,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
} }
const bool is_osx = io.ConfigMacOSXBehaviors; const bool is_osx = io.ConfigMacOSXBehaviors;
if (g.ActiveId != id && init_make_active) if (init_make_active && g.ActiveId != id)
{ {
IM_ASSERT(state && state->ID == id); IM_ASSERT(state && state->ID == id);
SetActiveID(id, window); SetActiveID(id, window);