-
-
Notifications
You must be signed in to change notification settings - Fork 10.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Context recovery / graceful handling of bad state #1651
Comments
I agree this is desirable, I'll have to think about how we can do it but there's definitively improvements to make. One of the problem is that several of those issues ideally wants some reporting, and for more local push/pop it is nice to be able to notify the programmer locally. I'm also not really sure we want imgui to be one of those library that spams you with warnings and log (whether they are printf or a specific window for that purpose!). Even if that's hidden behind some sort of flag, it typically end up being either enabled on all machines and spammy, or disabled and unnecessary, so it's a little tricky to find the right balance. If you have any suggestion.. |
I'm not a fan of having the library spam output anywhere - how about having End() take a custom user function like this: using handler = HandlerResponse (*)(Context* context, /* args for error type and description */, void* userData);
ImGui::End(handler CustomHandler = ImGui::DefaultHandler, void* userData /*passed as-is to handler */ = nullptr); This way, code is backwards-compatible. If you don't specify a custom handler, the default handler can call IM_ASSERT(). The code also won't have to implement writing anything anywhere - that's the handler's job. And HandlerResponse can communicate info back to imgui (maybe what to do on failure - drop entire frame vs attempt to recover as much UI as you can?). What do you think? |
I'll have to experiment with Begin/End, Push/Pop variants and first see how we can reliably detect and recover. Another kind of imgui issue that may be interesting to detect are ID collisions, which can happen anywhere. For those if we want a lightweight check we'll have to do it when either widget is active. This might end up getting similar to just rewiring IM_ASSERT() when you are in the context of your scripting language, assuming imgui can recover after said assert. |
Would it be possible to save / load the context's state to a chunk of memory? I'm thinking of something like void* buffer = malloc();
ImGui::SaveState(buffer, bufferSize);
bool success = runScriptUICode();
if(!success)
{
ImGui::LoadState(buffer, bufferSize); //Back where we started
}
ImGui::EndFrame(); |
Not really, but just destroying and recreating a context generally yield good result because the windows position/size are saved. You lose things like tree node open/close state but otherwise it's not really visible. |
That's workable. Ideally though, being able to save the state once the UI code gets "borked" then returning to it once it's unborked would be great. Some of the plugin code operates on a DCC-like app's object hierarchy and tree node state specifically is valuable to me. Not to mention, this might also help with the case of restoring UI state across launches which is another issue I was planning to bring up at one point... |
Depend what you mean by UI state: Tree nodes/Collapsing header open/close state I don't think you really want to be preserving most of tree node state but it may be useful to certain certain nodes for saving. If we end up reorganizing the state storage field we could add enough info. Currently the struct is:
We could stick in a few things, e.g.
Haven't really thought about it more than that. Z-order What else? I hope in the upcoming few months I can tackle more graceful error handling tho. |
Man I don't even know what all state involved in a restore is, but I'm setting out to find out now. |
@ocornut -- Did you get a chance to think about / tackle this more? I'm exposing ImGui in a live scripting context so it's common that there are mismatches when the code a user is writing isn't 'complete' yet due to try/catch style behavior in the scripting language. I have a workaround for now by having my own utilities that take and call a closure and make sure to do the imgui.inWindow(..., function()
imgui.selectable(...)
-- Can do stuff throwing errors here, will still call `.end()` after
error('oops!')
end) Again, sorry for using a non-C++ language to show this example but the point was to show the utility allowing safe calls that I wrote in the scripting language. :) Because I have these utilities it's not super urgent for me, but wondering if you've thought further. |
That's exactly the case I'm running into. I have a live reload system in place and sometimes a script is written to disk with a logic error somewhere, and on the next live reload my UI state goes FUBAR. I've resorted to some state tracking similar to what you have, but it's fragile, doesn't cover all cases, and feels hacky af. |
Sorry I haven't had time to look at that yet. It looks sufficiently simple and useful that I may. I think it possibly might make more sense as an explicit helper to be called optionally (and generally by user of scripting languages) rather than being hard-wired by default. The reason being that we can't just silently ignore those errors. The expectation is that the code running script would poll an error flag and turn this into end-user feedback, however at the library/C++ level we have no way of providing this feedback to the user. Making this explicit also solve the issue that scope are not easy to define (e.g. the issue with PushStyleCol/Begin/PopStyleCol/End patterns, see #1767). Even though they are less common, we would nice to also protect from excessive calls to PopXXX/EndXXX functions. Please understand that this never will be a 100% sandboxing, are we in agreement that this would be designed to minimize the side-effect and cost of programmer errors, but not to protect from malicious users? |
@ocornut — I’m in full agreement with all of this! Yeah, not meant to be a security feature at all, just convenience at most (in my case). One little question: Would the error polling just show most recent error or collect errors since the last poll? For GL calls for example it only collects last one which makes one need to call |
Yes, this shouldn't be intended to protect from malice, just misuse. If you're dealing with a malicious user you'll need to have bindings that apply enough mitigation to have some sort of measurable impact, and that doesn't belong in imgui - people who want such mitigations can implement them on top of the public imgui API just fine. |
Hello, Context: Our editor can be extended using plugins. Plugin hot-reload+ImGui is extremely fast to iterate with. Problem: Unfortunately API misuses are really ruining our party. These come in two flavors:
Both usually end with a C++ assertion being thrown which is less than ideal. Solution?: Both scenarios can be adressed in the same manner but solving the first one might be more work. Handling scenario 2. could look something like: ImGui::EnterUntrustedSection();
bool success = call_plugin_issuing_ImGui_calls());
if (!success)
ImGui::RollbackUntrustedSection();
ImGui::ExitUntrustedSection();
if (!success)
ImGui::Text("So sad"); Script execution failure was reported by the client code but that doesn't cover API misuse. The ideal version would validate the untrusted section on exit and roll it back if it did not pass. ImGui::EnterUntrustedSection();
call_plugin_issuing_ImGui_calls(); // alea jacta est
if (!ImGui::ExitUntrustedSection())
ImGui::Text("So sad"); Obviously logic already executed in the client code can not be rolled back (eg. While not a critical feature to have I wonder how hard it would be to implement on top of the current design? |
Seeing that #2096 is cross-referenced here might I add that I would be much more interested in completely rolling back a broken declaration rather than having a partial declaration automatically rendered valid. I'd rather present the user a known-to-be-working UI of my choosing in case of a failure. |
There's no magic "rolling back" we have to address specific issues one by one, clarify the fail cases and what we want to do out of them. It probably boils down to clearing most stacks. E.g. We could merely aim at making The problem is that genuine error needs to be reported somehow, we can't have a fully silent form of error handling. |
Precise error reporting would be nice to have and overriding IM_ASSERT to report errors seems good. This together with a safe However, I don't really understand your objection to the magic "roll back", is it on a technical standpoint? It looks like the most foolproof approach to me. |
I don't know what "rollback" means other than taking a snapshot of the entire memory used by dear imgui and restoring that, complete with pointers provided by the user-allocator (so yeah, it is a technical problem to implement). |
…ght by an assert in the End() function itself at the call site (instead of being reported in EndFrame). Past the assert, they don't lead to crashes any more. Missing calls to End(), pass the assert, should not lead to crashes any more, nor to the fallback/debug window appearing on screen. (#1651).
I made some changes so that mismatched Begin/End calls should not lead to crashes or other side effects any more. However note that they will still trigger IM_ASSERT() ( and I have improved the formulation and location of those asserts). For scripting language it is expected that you teach your assert handler to play nice with the app (e.g. error/log/abort script?). While this doesn't cover everything I believe this should cover MOST errors, and would be interested to know if it works better for you. @sherief , @ejulien , etc. |
…en showing the CTRL+Tab list and or fallback "...." tooltip.
…ssert when showing the CTRL+Tab list and or fallback "...." tooltip." This reverts commit 1b0e38d.
… mis-usage don't lead to hard crashes any more, facilitating integration with scripting languages. (#1651)
Note for the future: just found out it does not cover |
I have pushed this to master and docking now. However, the first time an error is logged, since the default including debug/tty logging, it'll print the "current settings" which is one way which should start directing users to new features: ImGui::Begin("Oops!"); [00001] [imgui-error] (current settings: Assert=1, Log=1, Tooltip=1)
[00001] [imgui-error] In window 'Oops!': Missing End()
Assertion failed: (0) && "Missing End()", file c:\omar\work\imgui\imgui.cpp, line 10501 I started working on a new https://github.com/ocornut/imgui/wiki/Error-Handling page. |
I invite all people interested in this to try it out and make feedback, with specific repros for ways we can improve it. API for recovery is in imgui_internal.h: ImGuiErrorRecoveryState state;
try
{
ImGui::ErrorRecoveryStoreState(&state);
.... run code
}
catch
{
ImGui::ErrorRecoveryTryToRecoverState(&state);
} Chosen name "Try to recover" over e.g. "Restore" to suggest this is not a 100% guaranteed recovery. Public stuff: // Options to configure how we handle recoverable errors [EXPERIMENTAL]
// - Error recovery is not perfect nor guaranteed! It is a feature to ease development.
// - Functions that support error recovery are using IM_ASSERT_USER_ERROR() instead of IM_ASSERT().
// - You not are not supposed to rely on it in the course of a normal application run.
// - Possible usage: facilitate recovery from errors triggered from a scripting language or after specific exceptions handlers.
// - Always ensure that on programmers seat you have at minimum Asserts or Tooltips enabled when making direct imgui API calls!
// Otherwise it would severely hinder your ability to catch and correct mistakes!
// Read https://github.com/ocornut/imgui/wiki/Error-Handling for details about typical usage scenarios:
// - Programmer seats: keep asserts (default), or disable asserts and keep error tooltips (new and nice!)
// - Non-programmer seats: maybe disable asserts, but make sure errors are resurfaced (visible log entries, use callback etc.)
// - Recovery after error from scripting language: record stack sizes before running script, disable assert, trigger breakpoint from ErrorCallback, recover with ErrorRecoveryTryToRecoverState(), restore settings.
// - Recovery after an exception handler: record stack sizes before try {} block, disable assert, set log callback, recover with ErrorRecoveryTryToRecoverState(), restore settings.
bool ConfigErrorRecovery; // = true // Enable error recovery support. Some errors won't be detected and lead to direct crashes if recovery is disabled.
bool ConfigErrorRecoveryEnableAssert; // = true // Enable asserts on recoverable error. By default call IM_ASSERT() when returning from a failing IM_ASSERT_USER_ERROR()
bool ConfigErrorRecoveryEnableDebugLog; // = true // Enable debug log output on recoverable errors.
bool ConfigErrorRecoveryEnableTooltip; // = true // Enable tooltip on recoverable errors. The tooltip include a way to enable asserts if they were disabled. The ErrorCallback is still private, as I expect it will be used by the same population as one using |
I am sorry but in your example snippet the recovery happens inside a try/catch. Does this also work for applications without exception handling or RTTI? |
Yes. That was merely an example.
|
Is this still the correct issue to post on? Maybe I am mistaken but I don't see a proper way for support scripting languages. For example calling bool ImGui::IsItemHovered(ImGuiHoveredFlags flags)
{
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
IM_ASSERT((flags & ~ImGuiHoveredFlags_AllowedMaskForIsItemHovered) == 0 && "Invalid flags for IsItemHovered()!");
.... As I understand Where is the main difficulty for properly supporting scripting languages? By that I mean exposing draw functions to scripts but of course not internal/backend functions like Thank you. |
I would argue this one specifically needs to be changed to a user error instead of a hard assert. My impression is there will be some cleanup to do. I have yet to try the change, mind you. |
The point is that not all errors are recoverable. We should strive to widen support for the most common errors, and I suppose this one should be using a recoverable one.
But it’s unlikely we’ll even aim to be 100% error proof as that would incur excessive cost for high-frequency calls.
|
For applications embedding Lua I might have found a viable solution. First of all I consider two kind of Dear ImGui functions.
Only drawing functions are exposed to Lua guest/user scripts. The Lua API has a C function named The definition
Now the only problem since version Setting With the explained approach it would be good to have a manual recovery option like the old Thank you for your time. Looking forward to your thoughts. |
@Mellnik would you mind opening a new issue for this? would be better tracked since it's not a trivial task. Thanks! |
I have found a solution that works for my request/problem in my previous post. Setting io.ConfigErrorRecoveryEnableAssert = false;
ImGui::EndFrame();
io.ConfigErrorRecoveryEnableAssert = true; So at least for me I won't need another issue for this. But if you like we can still create a new one for future works on the recovery system? Like I still wonder the following. You mentioned in an earlier post that not all errors are recoverable. But are all possible errors covered with asserts in the code base? |
(By asking questions or posting self-answer it is essentially asking me to interact which defeat the purpose of create new issues to silo or track things. I'm answering here assuming this is a closure on this topic. It's my fault for not reacting to your first post which nicely actually asked "Is this still the correct issue to post on?"). As per https://github.com/ocornut/imgui/wiki/Error-Handling, the idea is that you can call |
…d a child window, and from nested child windows. (#1651)
…d a child window, and from nested child windows. (ocornut#1651)
commit 2db3e9d Author: ocornut <[email protected]> Date: Tue Feb 25 17:11:56 2025 +0100 Backends: SDL2, SDL3: Use display bounds when SDL_GetDisplayUsableBounds() fails or return a zero size. (ocornut#8415, ocornut#3457) Analoguous to aa8e09d for GLFW. commit 9ab0b66 Author: ocornut <[email protected]> Date: Tue Feb 25 15:55:54 2025 +0100 Backends: fixed comment to state that ImGuiViewport::PlaformHandle is used to store SDL's WindowID, not SDL_Window*. (ocornut#7853) Amend 2d99052 commit dd89bb1 Author: ocornut <[email protected]> Date: Fri Feb 21 23:51:30 2025 +0100 Backends: DirectX11: configure swap chain creation for secondary viewports via undocumented ImGui_ImplDX11_SetSwapChainDescs(). (ocornut#5437, ocornut#7607, ocornut#7286, ocornut#2970) commit 3064e6d Author: Marius PvW <[email protected]> Date: Fri Feb 21 22:37:51 2025 +0100 Viewports + Backends: Win32: Fixed setting title bar text when application is compiled without UNICODE. (ocornut#7979, ocornut#5725) commit 6acdce7 Author: ocornut <[email protected]> Date: Fri Feb 21 22:12:53 2025 +0100 Backends: Win32: use UnregisterClassW() for matching consistency. (ocornut#8423, ocornut#7979) Amend 3293ef8 commit 7730601 Merge: 1a7b594 434b771 Author: ocornut <[email protected]> Date: Fri Feb 21 19:56:20 2025 +0100 Merge branch 'master' into docking # Conflicts: # backends/imgui_impl_glfw.cpp # backends/imgui_impl_glfw.h # backends/imgui_impl_opengl3.cpp # backends/imgui_impl_osx.h # backends/imgui_impl_osx.mm # backends/imgui_impl_sdl2.cpp # backends/imgui_impl_sdl3.cpp # backends/imgui_impl_win32.cpp # imgui.cpp commit 434b771 Author: ocornut <[email protected]> Date: Wed Feb 19 16:49:35 2025 +0100 Internals: packing ImGuiDataVarInfo + misc renaming + value of ImGuiDataType_Pointer doesn't need to be Count+1 commit 1a7b594 Author: ocornut <[email protected]> Date: Fri Feb 21 19:18:31 2025 +0100 Backends: GLFW/SDL2/SDL3: Update monitors and work areas information every frame, as the later may change regardless of monitor changes. (ocornut#8415) commit ea59440 Author: David Maas <[email protected]> Date: Fri Feb 21 17:08:16 2025 +0100 Backends: Win32: WM_SETTINGCHANGE's SPI_SETWORKAREA message also triggers a refresh of monitor list. (ocornut#8415) commit 1e18a6c Author: ocornut <[email protected]> Date: Fri Feb 21 16:55:35 2025 +0100 Examples: GLFW+Vulkan: make GLFW_DIR overridable in cmake bit. (ocornut#8419) commit a6bcbb1 Author: Tygyh <[email protected]> Date: Thu Feb 20 18:07:25 2025 +0100 Examples: Android: Update kotlin version (ocornut#8409) commit 6dc376f Author: ocornut <[email protected]> Date: Thu Feb 20 11:54:32 2025 +0100 ImFontAtlas: added software/drawlist version of ImGuiMouseCursor_Wait/ImGuiMouseCursor_Progress + moved GetMouseCursorTexData() to internals. commit 85c488e Author: ocornut <[email protected]> Date: Thu Feb 20 11:46:56 2025 +0100 Hot-fix for broken MouseDrawCursor support for ImGuiMouseCursor_Wait/ImGuiMouseCursor_Progress/ImGuiMouseCursor_NotAllowed. Amend 8a35386, eec097f. commit 05742f9 Author: ocornut <[email protected]> Date: Wed Feb 19 10:55:44 2025 +0100 Tables: share code between TableSetupColumn() and TableLoadSettings(). (ocornut#7934) commit 8b7b3ce Author: ocornut <[email protected]> Date: Wed Feb 19 10:14:38 2025 +0100 Tables: fixed an issue where Columns Width state wouldn't be correctly restored when hot-reloading .ini state. (ocornut#7934) Amend 7cd31c3 column->SortDirection initialized setting was wrong in first block but without side-effect, since sorting always stored explicitly in .ini data. commit eec097f Author: ocornut <[email protected]> Date: Tue Feb 18 18:52:08 2025 +0100 Added ImGuiMouseCursor_Progress mouse cursor 8a35386+ support in SDL2,SDL3,Win32,Allegro5 backends. Amend 8a35386 commit 8a35386 Author: ocornut <[email protected]> Date: Tue Feb 18 18:40:47 2025 +0100 Added ImGuiMouseCursor_Wait mouse cursor (busy/wait/hourglass shape) + support in SDL2,SDL3,Win32,Allegro5 backends. commit 8f0411f Author: ocornut <[email protected]> Date: Tue Feb 18 18:19:10 2025 +0100 Backends: OpenGL3: Lazily reinitialize embedded GL loader for when calling backend from e.g. other DLL boundaries. (ocornut#8406) commit afd659b Merge: a4ebe3d5 c4a32a1 Author: ocornut <[email protected]> Date: Mon Feb 17 11:46:16 2025 +0100 Merge branch 'master' into docking # Conflicts: # backends/imgui_impl_sdl2.cpp # backends/imgui_impl_vulkan.cpp commit c4a32a1 Author: Nico van Bentum <[email protected]> Date: Thu Feb 13 21:50:12 2025 +0100 Tabs: fixed middle-button to close not checking hovering, only close button visibility. (ocornut#8399, ocornut#8387) Main bug has been here since 54a60aa, but it's only ef7ffaf which made it very visible. commit 78ec127 Author: ocornut <[email protected]> Date: Fri Feb 14 21:39:45 2025 +0100 ImDrawList: added InitialFringeScale in ImDrawListSharedData. Default to 1.0f. This is to allow some DPI mods with less changes. Only the initial value in SetupDrawListSharedData() will need change. commit 2860d7b Author: ocornut <[email protected]> Date: Fri Feb 14 19:44:35 2025 +0100 Selectable: Fixed horizontal label alignment with SelectableTextAlign.x > 0 and specifying a selectable size. (ocornut#8338) Regression from ed7551c commit 474305c Author: ocornut <[email protected]> Date: Fri Feb 14 16:15:09 2025 +0100 ImFont: simpler constructor. commit ec4cd2c Author: ocornut <[email protected]> Date: Fri Feb 14 12:19:24 2025 +0100 Backends: Vulkan: Fixed crash with using no prototypes + *BREAKING* Added ApiVersion to ImGui_ImplVulkan_LoadFunctions(). (ocornut#8326, ocornut#8365, ocornut#8400) commit a4ebe3d Author: ocornut <[email protected]> Date: Fri Feb 14 12:04:05 2025 +0100 Viewports: Fixed assertion when multi-viewports disabled and no monitor submitted. Reworked 95c4111. (ocornut#8401, ocornut#8393, ocornut#8385) commit 98c2f6b Author: ocornut <[email protected]> Date: Thu Feb 13 16:19:41 2025 +0100 Tables, Error Handling: Recovery from invalid index in TableSetColumnIndex(). (ocornut#1651) commit e1ae7db Author: ocornut <[email protected]> Date: Thu Feb 13 16:03:40 2025 +0100 Backends: Vulkan: Fixed building with older headers not supporting VK_HEADER_VERSION_COMPLETE. (ocornut#8326, ocornut#8365) commit 12963f5 Author: ocornut <[email protected]> Date: Thu Feb 13 15:49:47 2025 +0100 Examples: Vulkan: make ApiVersion a little more visible in examples. (ocornut#8326, ocornut#8365) commit 890ead6 Author: ocornut <[email protected]> Date: Thu Feb 13 15:40:49 2025 +0100 Backends: Vulkan: Added ApiVersion field in ImGui_ImplVulkan_InitInfo. Dynamic rendering path loads "vkCmdBeginRendering/vkCmdEndRendering" without -KHR on API 1.3. (ocornut#8326, ocornut#8365) commit 95c4111 Author: Gabriel Rodriguez <[email protected]> Date: Wed Feb 12 12:39:44 2025 +0100 Viewports: default to first monitor is viewport is outside bounds. (ocornut#8393, ocornut#8385) Before the assert was introduced in d66f4e5 the viewport would be eventually clamped with ClampWindowPos using g.FallbackMonitor, but code would run temporarly with DpiScale=0. commit f94a5f0 Author: Rémy Tassoux <[email protected]> Date: Thu Feb 13 14:30:49 2025 +0100 Docs: Update doc about plutosvg (ocornut#8395) commit b78cc37 Author: ocornut <[email protected]> Date: Wed Feb 12 19:27:43 2025 +0100 Backends: SDL2: Fixed build for versions older than 2.0.14. (ocornut#7660) commit 71d39a4 Merge: 8679cfa a931fb7 Author: ocornut <[email protected]> Date: Wed Feb 12 19:17:48 2025 +0100 Merge branch 'master' into docking # Conflicts: # backends/imgui_impl_sdl2.cpp # backends/imgui_impl_sdl3.cpp # imgui.cpp # imgui_internal.h commit a931fb7 Author: ocornut <[email protected]> Date: Wed Feb 12 19:15:00 2025 +0100 Fixed static analyzer warning. (was harmless as initialized in NewFrame) commit 7cd31c3 Author: ocornut <[email protected]> Date: Wed Feb 12 19:08:52 2025 +0100 Tables: tamed some .ini settings optimizations to more accurately allow overwriting/hot-reloading settings. (ocornut#7934) commit 7221f5e Author: ocornut <[email protected]> Date: Wed Feb 12 19:01:02 2025 +0100 Styles, Tabs: Fixed ef7ffaf. (ocornut#8387) commit ef7ffaf Author: ocornut <[email protected]> Date: Wed Feb 12 15:46:17 2025 +0100 Styles, Tabs: (Breaking) Renamed TabMinWidthForCloseButton to TabCloseButtonMinWidthUnselected. Added TabCloseButtonMinWidthSelected. (ocornut#8387) commit 3d900ed Author: PuPuHX <[email protected]> Date: Tue Feb 11 10:57:47 2025 +0800 Examples: Win32+DirectX12: Fixed ExampleDescriptorHeapAllocator overflow free index. Amend 40b2286. commit 6916f93 Author: fdsa <[email protected]> Date: Tue Feb 11 13:12:55 2025 -0800 InputText: Allow CTRL+Shift+Z to redo even outside of OSX. (ocornut#8389) commit 3b2f260 Author: ocornut <[email protected]> Date: Mon Feb 10 21:33:49 2025 +0100 Windows: Fixed an issue where BeginChild() inside a collapsed Begin() wouldn't inherit the SkipItems flag. Amend/fix a89f05a (old!) Discovered while looking at glyph being processed in WIP branch. commit 4dc9df6 Author: ocornut <[email protected]> Date: Mon Feb 10 19:29:18 2025 +0100 Tables: fixed an issue where Columns Visible/Hidden state wouldn't be correctly overridden when hot-reloading .ini state. (ocornut#7934) commit 88cda0c Author: ocornut <[email protected]> Date: Mon Feb 10 12:39:54 2025 +0100 Fixed minor warning. Added comment. commit a431e12 Author: ocornut <[email protected]> Date: Mon Feb 10 12:09:44 2025 +0100 Backends: SDL2, SDL3: Using SDL_OpenURL() in platform_io.Platform_OpenInShellFn handler. (ocornut#7660) commit a18622c Author: ocornut <[email protected]> Date: Mon Feb 10 12:02:01 2025 +0100 TextLinkOpenURL(): fixed default Win32 io.PlatformOpenInShellFn handler to handle UTF-8 regardless of system regional settings. (ocornut#7660) commit 2206e31 Author: ocornut <[email protected]> Date: Mon Feb 10 11:37:55 2025 +0100 Demo: Combos: demonstrate a very simple way to add a filter to a combo. (ocornut#718) commit e8ad60c Author: edenware <[email protected]> Date: Fri Feb 7 21:01:46 2025 -0600 Fix typo (ocornut#8382) commit 50dbb08 Author: ocornut <[email protected]> Date: Fri Feb 7 22:57:15 2025 +0100 Tables: sneakily honor ImGuiNextWindowDataFlags_HasChildFlags/ImGuiNextWindowDataFlags_HasWindowFlags as a way to facilitate various hacks/workarounds. commit e368015 Author: ocornut <[email protected]> Date: Fri Feb 7 22:56:02 2025 +0100 Tables: a clipped scrolling table correctly clears SetNextWindowXXX flags. (ocornut#8196) Amend 43c51eb commit e5668b8 Author: ocornut <[email protected]> Date: Fri Feb 7 22:48:31 2025 +0100 Internals: rename ImGuiNextWindowData::Flags to HasFlags for consistency and to reduce mistakes. commit 8679cfa Merge: d803476 4982602 Author: ocornut <[email protected]> Date: Fri Feb 7 18:27:32 2025 +0100 Merge branch 'master' into docking # Conflicts: # backends/imgui_impl_glfw.cpp # backends/imgui_impl_glfw.h # examples/example_apple_metal/example_apple_metal.xcodeproj/project.pbxproj # imgui.cpp commit 4982602 Author: ocornut <[email protected]> Date: Fri Feb 7 18:16:04 2025 +0100 Windows, Style: Added style.WindowBorderHoverPadding setting to configure inner/outer padding applied to hit-testing of windows borders. Amend 3c7177c, 59f3c4f, ae7f833. Could be latched inside windows to be multi-dpi friendly, but likely won't matter soon. commit 914fbcf Author: ocornut <[email protected]> Date: Fri Feb 7 16:23:00 2025 +0100 Fonts: removed unnecessary const qualifier from ImFont::FindGlyph() Amend 0bde57c commit 4f1d380 Author: fdsa <[email protected]> Date: Wed Feb 5 18:41:03 2025 -0800 Fixed tabs and spaces (ocornut#8377) commit 0625b37 Author: ocornut <[email protected]> Date: Thu Feb 6 18:37:32 2025 +0100 Scrollbar: Rework logic that fades-out scrollbar when it becomes too small. Amend 0236bc2 commit cfed18a Author: ocornut <[email protected]> Date: Thu Feb 6 12:34:37 2025 +0100 Add ImFontConfig::GlyphExtraAdvanceX as a replacement for GlyphExtraSpacing.x (ocornut#242) Partly restore 1a31e31. commit 2d20e13 Author: ocornut <[email protected]> Date: Tue Feb 4 20:19:57 2025 +0100 Backends: GLFW: Added comment about io.AddMouseSourceEvent() not being properly called. (ocornut#8374) commit d803476 Merge: 1820fe5 1a31e31 Author: ocornut <[email protected]> Date: Mon Feb 3 18:42:24 2025 +0100 Merge branch 'master' into docking # Conflicts: # backends/imgui_impl_metal.mm # imgui.cpp # imgui_internal.h commit 1a31e31 Author: ocornut <[email protected]> Date: Mon Feb 3 17:55:35 2025 +0100 (Breaking) Fonts: removed ImFontConfig::GlyphExtraSpacing option which seems largely obsolete and unused. (ocornut#242) commit de962e8 Author: ocornut <[email protected]> Date: Mon Feb 3 17:50:12 2025 +0100 ImFont: remove SetGlyphVisible() Which was never marked public. Added by d284a6c. (ocornut#2149, ocornut#515) Making room by removing stuff that are inconvenient to implement in our scaling system. If you were using this function please post an issue to report it. commit da0ba9e Author: PhantomCloak <[email protected]> Date: Sun Feb 2 19:25:09 2025 +0300 Backends: WebGPU: add type alias for dawn WGPUProgrammableStageDescriptor -> WGPUComputeState. (ocornut#8369) commit 5dd8408 Author: ocornut <[email protected]> Date: Mon Feb 3 15:11:03 2025 +0100 InputTextWithHint(): Fixed buffer overflow when user callback modifies the buffer contents in a way that alters hint visibility. (ocornut#8368) commit 204cebc Author: ocornut <[email protected]> Date: Mon Feb 3 14:21:53 2025 +0100 Backends: Metal: Fixed a crash on application resources. (ocornut#8367, ocornut#7419) [@anszom] commit 6265339 Author: ocornut <[email protected]> Date: Mon Feb 3 14:01:48 2025 +0100 Fixed IsItemDeactivatedAfterEdit() signal being broken for Checkbox(), RadioButton(), Selectable(). (ocornut#8370) Item is already made inactive at the time of calling MarkItemEdited(). Fix a604d4f commit f820bf7 Author: ocornut <[email protected]> Date: Mon Feb 3 12:33:40 2025 +0100 Version 1.91.9 WIP commit e4db4e4 Author: ocornut <[email protected]> Date: Fri Jan 31 19:50:18 2025 +0100 Internals: renamed GetIOEx() to GetIO(). Added GetPlatformIO() explicit context variant. - OOPS commit 1820fe5 Author: ocornut <[email protected]> Date: Fri Jan 31 19:02:14 2025 +0100 Comments, minor alignments tweaks. commit e2a99b5 Author: ocornut <[email protected]> Date: Fri Jan 31 18:26:52 2025 +0100 Internals: renamed GetIOEx() to GetIO(). Added GetPlatformIO() explicit context variant. commit 11b3a7c Merge: c2dcc80 dbb5eea Author: ocornut <[email protected]> Date: Fri Jan 31 16:10:20 2025 +0100 Merge branch 'master' into docking commit dbb5eea Author: ocornut <[email protected]> Date: Fri Jan 31 15:57:48 2025 +0100 Version 1.91.8 commit e6c5296 Author: Konstantin Podsvirov <[email protected]> Date: Fri Jan 31 16:11:33 2025 +0300 Examples: SDL3: Fix for Emscripten platform (ocornut#8363) commit ae6cfd3 Author: ocornut <[email protected]> Date: Thu Jan 30 14:34:05 2025 +0100 Tables, Menus: Fixed tables or child windows submitted inside BeginMainMenuBar() being unable to save their settings. (ocornut#8356) Amend error handling (fa178f4) to avoid us setting ImGuiWindowFlags_NoSavedSettings on the wrong window. commit fa178f4 Author: ocornut <[email protected]> Date: Thu Jan 30 14:30:14 2025 +0100 Error Handling: Recovery from missing EndMenuBar() call. (ocornut#1651) commit c2dcc80 Author: ocornut <[email protected]> Date: Thu Jan 30 11:39:52 2025 +0100 Docking: fixed ImGuiWindowFlags_DockNodeHost/ImGuiWindowFlags_NavFlattened clash introduced by c38c18c just for 1.91.7 (ocornut#8357) commit 1dc7762 Author: ocornut <[email protected]> Date: Wed Jan 29 20:13:22 2025 +0100 Fixed zealous GCC warning. (ocornut#8355) Amend dfd1bc3 commit c0308da Author: ocornut <[email protected]> Date: Wed Jan 29 20:13:22 2025 +0100 Fixed zealous GCC warning. (ocornut#8355) Amend dfd1bc3 commit 0825952 Merge: 75d9965 dabc990 Author: ocornut <[email protected]> Date: Wed Jan 29 20:04:45 2025 +0100 Merge branch 'master' into docking # Conflicts: # imgui.cpp # imgui_internal.h commit dabc990 Author: ocornut <[email protected]> Date: Wed Jan 29 19:59:41 2025 +0100 Rename internal id for standardizing naming convention. "##menubar" -> "##MenuBar", "###NavWindowingList" -> "###NavWindowingOverlay" "###NavUpdateWindowing" one should have zero side effect on anyone. commit a711915 Author: ocornut <[email protected]> Date: Wed Jan 29 19:07:28 2025 +0100 EndMainMenuBar doesn't attempt to restore focus when there's an active id. (ocornut#8355) I don't have a specific issue in mind but it seems sane to add that test. commit dfd1bc3 Author: ocornut <[email protected]> Date: Wed Jan 29 19:05:18 2025 +0100 Tables, Menus: Fixed using BeginTable() in menu layer (any menu bar). (ocornut#8355) commit 4230e98 Author: ocornut <[email protected]> Date: Tue Jan 28 14:39:00 2025 +0100 Error Handling, Debug Log: IMGUI_DEBUG_LOG_ERROR() doesn't need the extra variable. Amend 2360061 commit ea0da0b Author: ocornut <[email protected]> Date: Mon Jan 27 18:04:44 2025 +0100 Extracted PushPasswordFont() out of InputText code. commit 75d9965 Author: ocornut <[email protected]> Date: Mon Jan 27 15:48:20 2025 +0100 Docking: move DockTabItemStatusFlags stuff next to its peers in DC structure. commit db4e541 Merge: 81dab64 9c4948a Author: ocornut <[email protected]> Date: Mon Jan 27 15:45:26 2025 +0100 Merge branch 'master' into docking # Conflicts: # imgui.cpp # imgui_internal.h # imgui_widgets.cpp commit 9c4948a Author: ocornut <[email protected]> Date: Mon Jan 27 15:41:24 2025 +0100 TabBar: Internals: added TabItemSpacing(). (ocornut#8349, ocornut#3291) commit a05d547 Author: ocornut <[email protected]> Date: Mon Jan 27 14:39:26 2025 +0100 Windows: separating WindowItemStatusFlags from ChildItemStatusFlag, because IsItemXXX _after_ BeginChild()>Begin() shouldn't return last status emitted by e.g. EndChild() As IsItemXXX() after is specced as returning title bar data we don't want to lock ourselves up from adding them to child window (e.g. MDI idea using windows to host child windows). commit 134fbe1 Author: ocornut <[email protected]> Date: Mon Jan 27 12:39:44 2025 +0100 Windows: Fixed IsItemXXXX() functions not working on append-version of EndChild(). (ocornut#8350) Also made some of the fields accessible after BeginChild() to match Begin() logic. commit 5a28f18 Author: ocornut <[email protected]> Date: Mon Jan 27 12:27:10 2025 +0100 Fixed parameter names to SetLastItemData() to align with current names. commit 81dab64 Merge: 355cb58 96e3b14 Author: ocornut <[email protected]> Date: Sat Jan 25 01:15:30 2025 +0100 Merge branch 'master' into docking commit 96e3b14 Author: ocornut <[email protected]> Date: Sat Jan 25 01:14:46 2025 +0100 Fixed build with IMGUI_ENABLE_FREETYPE (ocornut#8346) commit afb6e9a Author: ocornut <[email protected]> Date: Fri Jan 24 20:03:04 2025 +0100 Fonts: OversampleH auto-selection uses 36 as heuristic for now. commit 355cb58 Merge: 64e738c 8a1613a Author: ocornut <[email protected]> Date: Fri Jan 24 19:40:54 2025 +0100 Merge branch 'master' into docking, incl conflict merge in BeginMenuBar() for ocornut#8267 # Conflicts: # imgui_widgets.cpp commit 8a1613a Author: ocornut <[email protected]> Date: Fri Jan 24 19:27:50 2025 +0100 Fonts: OversampleH/OversampleV value defaults to 0 for automatic selection. commit 4211fdc Author: ocornut <[email protected]> Date: Wed Jan 22 15:44:51 2025 +0100 ImFont: compact comments in header section. commit 9eafb7b Author: ocornut <[email protected]> Date: Fri Jan 24 16:54:59 2025 +0100 ImFont: IndexLookup[] table hold 16-bit values even in ImWchar32 mode. commit 53244aa Author: ocornut <[email protected]> Date: Fri Jan 24 15:00:21 2025 +0100 Amend 9bc5b04 with a shadowed variable warning fix. commit ed7551c Author: ocornut <[email protected]> Date: Fri Jan 24 14:59:37 2025 +0100 Selectable: Fixed horizontal label alignment when combined with using ImGuiSelectableFlags_SpanAllColumns. (ocornut#8338) commit bbf9578 Author: ocornut <[email protected]> Date: Fri Jan 24 14:43:16 2025 +0100 Amend 9bc5b04 to avoid using GImGui mid-function. commit 9bc5b04 Author: ocornut <[email protected]> Date: Fri Jan 24 14:39:07 2025 +0100 Windows, Style: Fixed small rendering issues with menu bar, resize grip and scrollbar when using thick border sizes. (ocornut#8267, ocornut#7887) Amend e.g. 742b5f4. commit 1019934 Author: ocornut <[email protected]> Date: Thu Jan 23 11:31:32 2025 +0100 ImFontAtlas: made calling ClearFonts() call ClearInputData(). (ocornut#8174, ocornut#6556, ocornut#6336, ocornut#4723) commit 71da34c Author: ocornut <[email protected]> Date: Wed Jan 22 16:56:18 2025 +0100 Debug Tools: Tweaked font preview + indent "Glyphs" block. commit 64e738c Merge: a3802c8 6906ac9 Author: ocornut <[email protected]> Date: Wed Jan 22 12:19:09 2025 +0100 Merge branch 'master' into docking # Conflicts: # imgui.cpp commit 6906ac9 Author: ocornut <[email protected]> Date: Wed Jan 22 12:12:07 2025 +0100 ColorEdit, ColorPicker: (Breaking) redesigned how alpha is displayed in the preview square. (ocornut#8335, ocornut#1578, ocornut#346) Added ImGuiColorEditFlags_AlphaOpaque, ImGuiColorEditFlags_AlphaNoBg. Removed ImGuiColorEditFlags_AlphaPreview. commit fdca6c0 Author: ocornut <[email protected]> Date: Wed Jan 22 11:28:47 2025 +0100 Inputs: added IsMouseReleasedWithDelay() helper. (ocornut#8337, ocornut#8320) commit d17e9fc Author: ocornut <[email protected]> Date: Wed Jan 22 10:32:09 2025 +0100 Backends: SDL_GPU: shallow tweaks + disable anisotropy in sampler. Examples: SDL+Vulkan: Fixed incorrect defines. commit 3e6bdc2 Author: ocornut <[email protected]> Date: Wed Jan 22 10:22:31 2025 +0100 Examples: SDL3+SDL_GPU: use SDL_GPU_PRESENTMODE_MAILBOX swapchain parameters. commit a3802c8 Author: David Maas <[email protected]> Date: Wed Jan 22 10:01:40 2025 +0100 Backends: SDL3: new viewport windows are created with the SDL_WINDOW_HIDDEN flag before calling SDL_ShowWindow(). (ocornut#8328 Unsure why it was missing from a526ff8 commit bf13442 Author: ocornut <[email protected]> Date: Tue Jan 21 14:59:29 2025 +0100 Moved ImGuiColorEditFlags_AlphaPreview/ImGuiColorEditFlags_AlphaPreviewHalf flags. Demo: reorganized some of color edit/picker demo section. commit 2af26b7 Author: David Maas <[email protected]> Date: Tue Jan 21 14:25:39 2025 +0100 ColorEdit, ColorPicker: Fixed alpha preview broken in 1.91.7. (ocornut#8336, ocornut#8241). [@PathogenDavid] ImAlphaBlendColors() was broken by ImLerp() change. (cd6c83c) commit 7ae7c90 Author: ocornut <[email protected]> Date: Tue Jan 21 13:55:44 2025 +0100 Tabs, Style: reworked selected overline rendering to better accommodate for rounded tabs. (ocornut#8334) commit 6e94f6c Merge: 109dd2b e8779a6 Author: ocornut <[email protected]> Date: Mon Jan 20 18:04:31 2025 +0100 Merge branch 'master' into docking # Conflicts: # backends/imgui_impl_osx.mm # backends/imgui_impl_sdl2.cpp # backends/imgui_impl_sdl3.cpp # imgui.cpp # imgui_internal.h commit e8779a6 Author: ocornut <[email protected]> Date: Mon Jan 20 17:55:09 2025 +0100 Font: direct AddText()/RenderText() calls don't need to call strlen() if below clipping region. Unlikely to meaningful affect anyone but still.. commit 4c2e7bb Author: ocornut <[email protected]> Date: Mon Jan 20 15:24:46 2025 +0100 Backends: SDL2,SDL3: removed assert preventing using ImGui_ImplSDL2_SetGamepadMode()/ImGui_ImplSDL3_SetGamepadMode() with ImGui_ImplSDL2_GamepadMode_Manual/ImGui_ImplSDL3_GamepadMode_Manual and an empty array. (ocornut#8329) commit 8b0af7f Author: ocornut <[email protected]> Date: Mon Jan 20 14:30:40 2025 +0100 Backends: SDL: update comments regarding API stability, regarding SDL_GPU and SDL_Renderer. commit aa1b4ea Author: Julian Rachele <[email protected]> Date: Sun Jan 19 16:30:15 2025 -0500 Backends: OSX: Remove notification observer when shutting down. (ocornut#8331) commit aa23f38 Author: Daniel K. O. (dkosmari) <none@none> Date: Fri Jan 17 19:18:05 2025 -0300 Backends: SDL_Renderer2/3: Use endian-dependent RGBA32 texture format, to match SDL_Color. (ocornut#8327) commit 80c9cd1 Author: ocornut <[email protected]> Date: Sat Jan 18 16:43:17 2025 +0100 Font: reduce unnecessary padding in ImFontConfig struct too. commit d7454de Author: ocornut <[email protected]> Date: Fri Jan 17 18:09:28 2025 +0100 Font: minor tweak to struct alignment. commit dd89a37 Author: ocornut <[email protected]> Date: Fri Jan 17 17:11:22 2025 +0100 Backends: Vulkan: sharing duplicate code. (ocornut#5446, ocornut#8326) commit 487d7f9 Author: ocornut <[email protected]> Date: Thu Jan 16 22:30:43 2025 +0100 Font: Internals: make used page maps smaller. Since it's extremely rarely used and for iterations only. ~34->16 bytes with ImWchar32. commit f2262eb Author: ocornut <[email protected]> Date: Thu Jan 16 19:46:54 2025 +0100 Windows: latch FontRefSize at time of Begin(), consistent with e.g. TitleBarHeight, and to avoid calling CalcFontSize() on non-current window. commit b7c27c5 Author: ocornut <[email protected]> Date: Thu Jan 16 19:07:09 2025 +0100 Windows: legacy SetWindowFontScale() is properly inherited by nested child windows. (ocornut#2701, ocornut#8138, ocornut#1018) commit 4c64ba1 Author: ocornut <[email protected]> Date: Thu Jan 16 17:42:00 2025 +0100 imgui_freetype: fixed issue where glyph advances would incorrectly be snapped to pixels. commit 0077357 Author: Diego Mateos <[email protected]> Date: Thu Jan 16 17:10:26 2025 +0100 Ignore vscode artifacts (ocornut#8324) commit b4a5d1d Author: ocornut <[email protected]> Date: Thu Jan 16 12:42:54 2025 +0100 Backends: SDLGPU3: Rename GpuDevice->Device. Expose ImGui_ImplSDLGPU3_CreateDeviceObjects(), ImGui_ImplSDLGPU3_DestroyDeviceObjects(). Misc renaming. (ocornut#8163, ocornut#7998, ocornut#7988) commit 109dd2b Author: ocornut <[email protected]> Date: Wed Jan 15 17:50:57 2025 +0100 Backends: Vulkan: VK_SUBOPTIMAL_KHR doesn't skip frame. (ocornut#7831, ocornut#7825) commit 507cdba Author: ocornut <[email protected]> Date: Wed Jan 15 17:38:37 2025 +0100 Backends: Vulkan: vkQueuePresentKHR() returning VK_SUBOPTIMAL_KHR keeps moving forward. (ocornut#7825) commit 015186a Merge: b9badb5 0f33d71 Author: ocornut <[email protected]> Date: Wed Jan 15 17:34:17 2025 +0100 Merge branch 'master' into docking # Conflicts: # backends/imgui_impl_dx12.cpp # backends/imgui_impl_vulkan.cpp commit 0f33d71 Author: ocornut <[email protected]> Date: Wed Jan 15 17:25:44 2025 +0100 Examples: Vulkan: vkAcquireNextImageKHR() and vkQueuePresentKHR() returning VK_SUBOPTIMAL_KHR keeps moving forward. (ocornut#7825, ocornut#7831) commit b9badb5 Author: ocornut <[email protected]> Date: Wed Jan 15 17:08:04 2025 +0100 Backends: Vulkan: removed misleading code incrementing frameindex. (ocornut#7834) Thanks NostraMagister! commit 8ebf22d Author: ocornut <[email protected]> Date: Wed Jan 15 16:10:47 2025 +0100 Backends: Vulkan: use ImVector<> for simplicity. commit 6684984 Author: ocornut <[email protected]> Date: Wed Jan 15 15:13:05 2025 +0100 Examples: DirectX12: Reduced number of frame in flight from 3 to 2 in provided example, to reduce latency. commit 0e21bde Author: ocornut <[email protected]> Date: Wed Jan 15 13:58:38 2025 +0100 Misc shallow merge to reduce diff in other branches. commit 8a9de84 Author: ocornut <[email protected]> Date: Wed Jan 15 13:47:52 2025 +0100 FontAtlas: reduced baked IM_DRAWLIST_TEX_LINES_WIDTH_MAX from 63 to 32. (ocornut#3245) commit 100075f Author: ocornut <[email protected]> Date: Wed Jan 15 12:05:33 2025 +0100 Backends: DirectX12: Texture upload use the command queue provided in ImGui_ImplDX12_InitInfo instead of creating its own. + minor tweaks to faciliate branch merging. commit c59a226 Author: ocornut <[email protected]> Date: Wed Jan 15 11:58:47 2025 +0100 Version 1.91.8 WIP commit c0ae325 Merge: d0d571e 5c1d2d1 Author: ocornut <[email protected]> Date: Tue Jan 14 13:46:39 2025 +0100 Merge branch 'master' into docking # Conflicts: # imgui.cpp commit 5c1d2d1 Author: ocornut <[email protected]> Date: Tue Jan 14 13:16:43 2025 +0100 Version 1.91.7 commit 9f8481a Author: ocornut <[email protected]> Date: Tue Jan 14 13:14:50 2025 +0100 (Breaking) TreeNode: renamed ImGuiTreeNodeFlags_SpanTextWidth to ImGuiTreeNodeFlags_SpanLabelWidth. (ocornut#6937) commit 21902e2 Author: ocornut <[email protected]> Date: Mon Jan 13 19:51:15 2025 +0100 Backends: SDL_GPU: fixed SDL_GPUViewport initialisation. (ocornut#8163, ocornut#7998, ocornut#7988) Probably harmless. Amend 8bbccf7 commit c38c18c Author: ocornut <[email protected]> Date: Mon Jan 13 19:39:57 2025 +0100 Avoid using 1<<31 for ImGuiWindowFlags_NavFlattened as it seems to confuse some binding generators. commit c5f6094 Author: ocornut <[email protected]> Date: Mon Jan 13 19:18:05 2025 +0100 Demo: tweak demo for ImGuiTreeNodeFlags_LabelSpanAllColumns. (ocornut#8318, ocornut#3565) commit 290e402 Author: ocornut <[email protected]> Date: Mon Jan 13 18:55:09 2025 +0100 TreeNode, Tables: added ImGuiTreeNodeFlags_LabelSpanAllColumns. (ocornut#8318, ocornut#3565) commit 6fb7d44 Author: ocornut <[email protected]> Date: Mon Jan 13 16:46:29 2025 +0100 Backends: SDL2/SDL3: Comments. (ocornut#7672, ocornut#7670) commit 32cea85 Author: ocornut <[email protected]> Date: Mon Jan 13 15:51:39 2025 +0100 Debug Tools: Item Picker: Always available in menu. Tweak Demo Debug Options. (ocornut#2673, ocornut#1651) commit 00f12b9 Author: ocornut <[email protected]> Date: Mon Jan 13 15:22:45 2025 +0100 InputText: Fixed not calling CallbackEdit on revert/clear with Escape key. (ocornut#8273) + rework comments. Seems like there is no reason to not run that path. Amend ancient 9501cd9, f3ab5e6
I'm using vanilla Dear Imgui v1.60 WIP.
I have an app that exposes imgui API to plugins using a scripting language. Now, in my own code I can be sure that I am "well-behaved" - for example, I match calls to ImGui::Begin() with calls to ImGui::End(). But I can't be sure that plugins will be the same. I also have live reloading of plugin scripts, and sometimes I end up trying to load plugin code that won't compile (I can keep using the last-known-good version in this case) or worse: plugin code that isn't well-behaved with respect to imgui API. Consider a plugin that consists entirely of [the scrip equivalent of] the following:
I end up hitting this assertion:
As a feature request, is it possible to consider supporting more graceful failures? I don't have a solid idea in mind, but you can see my use case above. It could be something like D3D12's command lists, where the CloseCommandList() function returns a status code indicating whether this was a valid or malformed command list - maybe ImGui::EndFrame() could return a similar value and just drop the frame altogether, or render as much of it as it can [and I realize how this is a fuzzy concept - I'm just thinking out loud here].
Is there some other way to do this that I'm missing? I wouldn't mind running the plugin code in its own imgui context (multiple context support rocks!), but currently that doesn't seem to solve the problem I have.
The text was updated successfully, but these errors were encountered: