Skip to content

v1.82

Compare
Choose a tag to compare
@ocornut ocornut released this 15 Mar 19:40
· 2140 commits to master since this release

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
Discussions: https://github.com/ocornut/imgui/discussions

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


Thank you!

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;

  • This is a general maintenance release.
  • Arcs and rounded corners are now auto-tessellated, including the "fast" paths for rounded rectangles.
  • Improved/fixes old API technical debt, getting rid of more bools.
  • Fixes for various edge cases formatting features in Drags/Sliders.
  • Backends: Native Android backend + example.
  • Backends: Consistently fixed handling of framebuffer transparency in all backends.
  • Backends: DX9: Fix for colored glyphes.
  • Helper scripts for popular debuggers.
  • Dozens of other small additions and fixes.

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 redirecting functions/enums names that were marked obsolete in 1.66 (September 2018):
    • ImGui::SetScrollHere() --> use ImGui::SetScrollHereY()
  • ImDrawList: upgraded AddPolyline()/PathStroke()s bool closed parameter to use ImDrawFlags flags.
    • bool closed = false --> use ImDrawFlags_None, or 0
    • bool closed = true --> use ImDrawFlags_Closed (guaranteed to always stay == 1 in the future).
      Difference may not be noticeable for most but zealous type-checking tools may report a need to change.
  • ImDrawList: upgraded AddRect(), AddRectFilled(), PathRect() to use ImDrawFlags instead of ImDrawCornersFlags.
    • ImDrawCornerFlags_TopLeft --> use ImDrawFlags_RoundCornersTopLeft
    • ImDrawCornerFlags_BotRight --> use ImDrawFlags_RoundCornersBottomRight
    • ImDrawCornerFlags_None --> use ImDrawFlags_RoundCornersNone etc.
      Flags now sanely defaults to 0 instead of 0x0F, consistent with all other flags in the API.
      IMPORTANT: The default with rounding > 0.0f is now "round all corners" vs old implicit "round no corners":
    • rounding == 0.0f + flags == 0 --> meant no rounding --> unchanged (common use)
    • rounding > 0.0f + flags != 0 --> meant rounding --> unchanged (common use)
    • rounding == 0.0f + flags != 0 --> meant no rounding --> unchanged (unlikely use)
    • rounding > 0.0f + flags == 0 --> meant no rounding --> BREAKING (unlikely use)!
      • this ONLY matters for hardcoded use of 0 with rounding > 0.0f.
      • fix by using named ImDrawFlags_RoundCornersNone or rounding == 0.0f!
      • this is technically the only real breaking change which we can't solve automatically (it's also uncommon).
        The old ImDrawCornersFlags used awkward default values of ~0 or 0xF (4 lower bits set) to signify "round all corners" and we sometimes encouraged using them as shortcuts. As a result the legacy path still support use of hardcoded ~0 or any value from 0x1 or 0xF. They will behave the same with legacy paths enabled (will assert otherwise). Courtesy of legacy untangling commity: [@rokups, @ocornut, @thedmd]
  • ImDrawList: clarified that PathArcTo()/PathArcToFast() won't render with radius < 0.0f. Previously it sorts of accidentally worked but would lead to counter-clockwise paths which and have an effect on anti-aliasing.
  • InputText: renamed ImGuiInputTextFlags_AlwaysInsertMode to ImGuiInputTextFlags_AlwaysOverwrite, old name was an incorrect description of behavior. Was ostly used by memory editor. Kept inline redirection function. (#2863)
  • Moved misc/natvis/imgui.natvis to misc/debuggers/imgui.natvis as we will provide scripts for other debuggers.
  • Style: renamed rarely used style.CircleSegmentMaxError (old default = 1.60f) to style.CircleTessellationMaxError (new default = 0.30f) as its meaning changed. (#3808) [@thedmd]
  • Win32+MinGW: Re-enabled IME functions by default even under MinGW. In July 2016, issue #738 had me incorrectly disable those default functions for MinGW. MinGW users should: either link with -limm32, either set their imconfig file with '#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS'. (#2590, #738) [@actboy168]
  • Backends: Win32: Pragma linking with dwmapi.lib (Vista-era, ~9 kb). MinGW users will need to link with -ldwmapi.

All Changes

  • Window, Nav: Fixed crash when calling SetWindowFocus(NULL) at the same time a new window appears. (#3865) [@nem0]
  • Window: Shrink close button hit-testing region when it covers an abnormally high portion of the window visible area (e.g. when window is collapsed + moved in a corner) to facilitate moving the window away. (#3825)
  • Nav: Various fixes for losing gamepad/keyboard navigation reference point when a window reappears or when it appears while gamepad/keyboard are not being used. (#787)
  • Drags: Fixed crash when using DragScalar() directly (not via common wrapper like DragFloat() etc.) with ImGuiSliderFlags_AlwaysClamp + only one of either p_min or p_max set. (#3824) [@harry75369]
  • Drags, Sliders: Fixed a bug where editing value would use wrong number if there were digits right after format specifier (e.g. using "%f123" as a format string). [@rokups]
  • Drags, Sliders: Fixed a bug where using custom formatting flags (',$,_) supported by stb_sprintf.h would cause incorrect value to be displayed. (#3604) [@rokups]
  • Drags, Sliders: Support ImGuiSliderFlags_Logarithmic flag with integers. Because why not? (#3786)
  • Tables: Fixed unaligned accesses when using TableSetBgColor(ImGuiTableBgTarget_CellBg). (#3872)
  • IsItemHovered(): fixed return value false positive when used after EndChild(), EndGroup() or widgets using either of them, when the hovered location is located within a child window, e.g. InputTextMultiline(). This is intended to have no side effects, but brace yourself for the possible comeback.. (#3851, #1370)
  • Drag and Drop: can use BeginDragDropSource() for other than the left mouse button as long as the item has an ID (for ID-less items will add new functionalities later). (#1637, #3885)
  • Misc: Added GetAllocatorFunctions() to facilitate sharing allocators across DLL boundaries. (#3836)
  • ImFontAtlas: Added bool TexPixelsUseColors output to help backend decide of underlying texture format. (#3369) This can currently only ever be set by the Freetype renderer.
  • imgui_freetype: Added ImGuiFreeTypeBuilderFlags_Bitmap flag to request Freetype loading bitmap data. This may have an effect on size and must be called with correct size values. (#3879) [@metarutaiga]
  • ImDrawList: PathArcTo() now supports int num_segments = 0 (new default) and adaptively tessellate.
    The adaptive tessellation uses look up tables, tends to be faster than old PathArcTo() while maintaining quality for large arcs (tessellation quality derived from style.CircleTessellationMaxError) (#3491) [@thedmd]
  • ImDrawList: PathArcToFast() also adaptively tesselate efficiently. This means that large rounded corners in e.g. hi-dpi settings will generally look better. (#3491) [@thedmd]
  • ImDrawList: AddCircle, AddCircleFilled(): Tweaked default segment count calculation to honor MaxError with more accuracy. Made default segment count always even for better looking result. (#3808) [@thedmd]
  • Misc: Added debuggers/imgui.gdb and debuggers/imgui.natstepfilter (along with existing debuggers/imgui.natvis scripts to configure popular debuggers into skipping trivial functions when using StepInto. [@rokups]
  • Backends: Android: Added native Android backend. (#3446) [@duddel]
  • Backends: Win32: Added ImGui_ImplWin32_EnableAlphaCompositing() to facilitate experimenting with alpha compositing and transparent windows. (#2766, #3447 etc.).
  • Backends: OpenGL, Vulkan, DX9, DX10, DX11, DX12, Metal, WebGPU, Allegro: Rework blending equation to preserve alpha in output buffer (using SrcBlendAlpha = ONE, DstBlendAlpha = ONE_MINUS_SRC_ALPHA consistently across all backends), facilitating compositing of the output buffer with another buffer. (#2693, #2764, #2766, #2873, #3447, #3813, #3816) [@ocornut, @thedmd, @ShawnM427, @Ubpa, @aiekick]
  • Backends: DX9: Fix to support IMGUI_USE_BGRA_PACKED_COLOR. (#3844) [@Xiliusha]
  • Backends: DX9: Fix to support colored glyphs, using newly introduced 'TexPixelsUseColors' info. (#3844)
  • Examples: Android: Added Android + GL ES3 example. (#3446) [@duddel]
  • Examples: Reworked setup of clear color to be compatible with transparent values.
  • CI: Use a dedicated "scheduled" workflow to trigger scheduled builds. Forks may disable this workflow if scheduled builds builds are not required. [@rokups]
  • Log/Capture: Added LogTextV, a va_list variant of LogText. [@PathogenDavid]

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.81 to 1.82 related to the docking branch (multi-viewport and docking features) include:

  • Viewports: Fix setting of ImGuiViewportFlags_NoRendererClear. (#3213)
  • Viewports: Added GetViewportPlatformMonitor() with a safety net to keep code portable.
  • Viewports, Backends: SDL: Fix missing ImGuiBackendFlags_HasSetMousePos flag in docking branch (ok in master).
  • Viewports, Backends: GLFW: Fix application of WantSetMousePos. (#1542, #787)

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 the sane Visual Studio projects generated by premake.

Gallery

Below a selection of screenshots from Gallery threads...

@aiekick: "Some Screenshots of my live shader editor NoodlesPlate"
devenv_hdPqSAjMYJ

@gboisse: "Oh never realised ImGui had a color wheel option, great stuff! 🙂"
rogueengine

@EisernSchild "Here's a first look at my scripted thread/hlsl-shaders engine :)"
scap_01

Duckstation
https://github.com/stenzek/duckstation
157884104_774294969893966_2463941389825730222_n

@soufianekhiat "I'm trying to build a collection of controls & draws which can help for my image processing/dataviz hack/prototypes."
https://github.com/soufianekhiat/DearWidgets
Ycx9HI8aBP
kYA3Dw6TmH


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.