mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	IO: removed io.MetricsActiveAllocations introduced in 1.63. Same as 'g.DebugMemAllocCount - g.DebugMemFreeCount' (still displayed in Metrics.
This commit is contained in:
		@@ -44,6 +44,8 @@ Breaking changes:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 - Debug Tools: Renamed ShowStackToolWindow() ("Stack Tool") to ShowIdStackToolWindow() ("ID Stack Tool"),
 | 
					 - Debug Tools: Renamed ShowStackToolWindow() ("Stack Tool") to ShowIdStackToolWindow() ("ID Stack Tool"),
 | 
				
			||||||
   as earlier name was misleading. Kept inline redirection function. (#4631)
 | 
					   as earlier name was misleading. Kept inline redirection function. (#4631)
 | 
				
			||||||
 | 
					 - IO: Removed io.MetricsActiveAllocations introduced in 1.63, was displayed in Metrics and unlikely to
 | 
				
			||||||
 | 
					   be accessed by end-user. Value still visible in the UI and easily to recompute from a delta.
 | 
				
			||||||
 - ListBox, Combo: Changed signature of "name getter" callback in old one-liner ListBox()/Combo() apis.
 | 
					 - ListBox, Combo: Changed signature of "name getter" callback in old one-liner ListBox()/Combo() apis.
 | 
				
			||||||
   Before:
 | 
					   Before:
 | 
				
			||||||
      getter type:   bool (*getter)(void* user_data, int idx, const char** out_text)
 | 
					      getter type:   bool (*getter)(void* user_data, int idx, const char** out_text)
 | 
				
			||||||
@@ -103,6 +105,7 @@ Other changes:
 | 
				
			|||||||
  Was most often noticable when using an horizontal scrollbar. (#6789)
 | 
					  Was most often noticable when using an horizontal scrollbar. (#6789)
 | 
				
			||||||
- Misc: Most text functions also treat "%.*s" (along with "%s") specially to avoid formatting. (#3466, #6846)
 | 
					- Misc: Most text functions also treat "%.*s" (along with "%s") specially to avoid formatting. (#3466, #6846)
 | 
				
			||||||
- IO: Setting io.WantSetMousePos ignores incoming MousePos events. (#6837, #228) [@bertaye]
 | 
					- IO: Setting io.WantSetMousePos ignores incoming MousePos events. (#6837, #228) [@bertaye]
 | 
				
			||||||
 | 
					- Debug Tools: Metrics: Added log recent alloc/free calls.
 | 
				
			||||||
- ImDrawList: Added AddEllipse(), AddEllipseFilled(), PathEllipticalArcTo(). (#2743) [@Doohl]
 | 
					- ImDrawList: Added AddEllipse(), AddEllipseFilled(), PathEllipticalArcTo(). (#2743) [@Doohl]
 | 
				
			||||||
- ImVector: Added find_index() helper.
 | 
					- ImVector: Added find_index() helper.
 | 
				
			||||||
- Backends: GLFW: Clear emscripten's MouseWheel callback before shutdown. (#6790, #6096, #4019) [@halx99]
 | 
					- Backends: GLFW: Clear emscripten's MouseWheel callback before shutdown. (#6790, #6096, #4019) [@halx99]
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										57
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -424,6 +424,7 @@ CODE
 | 
				
			|||||||
 When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
 | 
					 When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
 | 
				
			||||||
 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 - 2023/09/27 (1.90.0) - io: removed io.MetricsActiveAllocations introduced in 1.63. Same as 'g.DebugMemAllocCount - g.DebugMemFreeCount' (still displayed in Metrics, unlikely to be accessed by end-user).
 | 
				
			||||||
 - 2023/09/26 (1.90.0) - debug tools: Renamed ShowStackToolWindow() ("Stack Tool") to ShowIdStackToolWindow() ("ID Stack Tool"), as earlier name was misleading. Kept inline redirection function. (#4631)
 | 
					 - 2023/09/26 (1.90.0) - debug tools: Renamed ShowStackToolWindow() ("Stack Tool") to ShowIdStackToolWindow() ("ID Stack Tool"), as earlier name was misleading. Kept inline redirection function. (#4631)
 | 
				
			||||||
 - 2023/09/15 (1.90.0) - ListBox, Combo: changed signature of "name getter" callback in old one-liner ListBox()/Combo() apis. kept inline redirection function (will obsolete).
 | 
					 - 2023/09/15 (1.90.0) - ListBox, Combo: changed signature of "name getter" callback in old one-liner ListBox()/Combo() apis. kept inline redirection function (will obsolete).
 | 
				
			||||||
                           - old: bool Combo(const char* label, int* current_item, bool (*getter)(void* user_data, int idx, const char** out_text), ...)
 | 
					                           - old: bool Combo(const char* label, int* current_item, bool (*getter)(void* user_data, int idx, const char** out_text), ...)
 | 
				
			||||||
@@ -4223,26 +4224,50 @@ float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
 | 
				
			|||||||
void* ImGui::MemAlloc(size_t size)
 | 
					void* ImGui::MemAlloc(size_t size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    void* ptr = (*GImAllocatorAllocFunc)(size, GImAllocatorUserData);
 | 
					    void* ptr = (*GImAllocatorAllocFunc)(size, GImAllocatorUserData);
 | 
				
			||||||
 | 
					#ifndef IMGUI_DISABLE_DEBUG_TOOLS
 | 
				
			||||||
    if (ImGuiContext* ctx = GImGui)
 | 
					    if (ImGuiContext* ctx = GImGui)
 | 
				
			||||||
    {
 | 
					        DebugAllocHook(&ctx->DebugAllocInfo, ctx->FrameCount, ptr, size);
 | 
				
			||||||
        ctx->IO.MetricsActiveAllocations++;
 | 
					#endif
 | 
				
			||||||
        //printf("[%05d] MemAlloc(%d) -> 0x%p\n", ctx->FrameCount, size, ptr);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return ptr;
 | 
					    return ptr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// IM_FREE() == ImGui::MemFree()
 | 
					// IM_FREE() == ImGui::MemFree()
 | 
				
			||||||
void ImGui::MemFree(void* ptr)
 | 
					void ImGui::MemFree(void* ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					#ifndef IMGUI_DISABLE_DEBUG_TOOLS
 | 
				
			||||||
    if (ptr != NULL)
 | 
					    if (ptr != NULL)
 | 
				
			||||||
        if (ImGuiContext* ctx = GImGui)
 | 
					        if (ImGuiContext* ctx = GImGui)
 | 
				
			||||||
        {
 | 
					            DebugAllocHook(&ctx->DebugAllocInfo, ctx->FrameCount, ptr, (size_t)-1);
 | 
				
			||||||
            ctx->IO.MetricsActiveAllocations--;
 | 
					#endif
 | 
				
			||||||
            //printf("[%05d] MemFree(0x%p)\n", ctx->FrameCount, ptr);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    return (*GImAllocatorFreeFunc)(ptr, GImAllocatorUserData);
 | 
					    return (*GImAllocatorFreeFunc)(ptr, GImAllocatorUserData);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// We record the number of allocation in recent frames, as a way to audit/sanitize our guiding principles of "no allocations on idle/repeating frames"
 | 
				
			||||||
 | 
					void ImGui::DebugAllocHook(ImGuiDebugAllocInfo* info, int frame_count, void* ptr, size_t size)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiDebugAllocEntry* entry = &info->LastEntriesBuf[info->LastEntriesIdx];
 | 
				
			||||||
 | 
					    IM_UNUSED(ptr);
 | 
				
			||||||
 | 
					    if (entry->FrameCount != frame_count)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        info->LastEntriesIdx = (info->LastEntriesIdx + 1) % IM_ARRAYSIZE(info->LastEntriesBuf);
 | 
				
			||||||
 | 
					        entry = &info->LastEntriesBuf[info->LastEntriesIdx];
 | 
				
			||||||
 | 
					        entry->FrameCount = frame_count;
 | 
				
			||||||
 | 
					        entry->AllocCount = entry->FreeCount = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (size != (size_t)-1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        entry->AllocCount++;
 | 
				
			||||||
 | 
					        info->TotalAllocCount++;
 | 
				
			||||||
 | 
					        //printf("[%05d] MemAlloc(%d) -> 0x%p\n", frame_count, size, ptr);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        entry->FreeCount++;
 | 
				
			||||||
 | 
					        info->TotalFreeCount++;
 | 
				
			||||||
 | 
					        //printf("[%05d] MemFree(0x%p)\n", frame_count, ptr);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char* ImGui::GetClipboardText()
 | 
					const char* ImGui::GetClipboardText()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
@@ -13720,7 +13745,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
 | 
				
			|||||||
    Text("Dear ImGui %s", GetVersion());
 | 
					    Text("Dear ImGui %s", GetVersion());
 | 
				
			||||||
    Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
 | 
					    Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
 | 
				
			||||||
    Text("%d vertices, %d indices (%d triangles)", io.MetricsRenderVertices, io.MetricsRenderIndices, io.MetricsRenderIndices / 3);
 | 
					    Text("%d vertices, %d indices (%d triangles)", io.MetricsRenderVertices, io.MetricsRenderIndices, io.MetricsRenderIndices / 3);
 | 
				
			||||||
    Text("%d visible windows, %d active allocations", io.MetricsRenderWindows, io.MetricsActiveAllocations);
 | 
					    Text("%d visible windows, %d current allocations", io.MetricsRenderWindows, g.DebugAllocInfo.TotalAllocCount - g.DebugAllocInfo.TotalFreeCount);
 | 
				
			||||||
    //SameLine(); if (SmallButton("GC")) { g.GcCompactAll = true; }
 | 
					    //SameLine(); if (SmallButton("GC")) { g.GcCompactAll = true; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Separator();
 | 
					    Separator();
 | 
				
			||||||
@@ -14034,6 +14059,20 @@ void ImGui::ShowMetricsWindow(bool* p_open)
 | 
				
			|||||||
        TreePop();
 | 
					        TreePop();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Settings
 | 
				
			||||||
 | 
					    if (TreeNode("Memory allocations"))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ImGuiDebugAllocInfo* info = &g.DebugAllocInfo;
 | 
				
			||||||
 | 
					        Text("%d current allocations", info->TotalAllocCount - info->TotalFreeCount);
 | 
				
			||||||
 | 
					        int buf_size = IM_ARRAYSIZE(info->LastEntriesBuf);
 | 
				
			||||||
 | 
					        for (int n = buf_size - 1; n >= 0; n--)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ImGuiDebugAllocEntry* entry = &info->LastEntriesBuf[(info->LastEntriesIdx - n + buf_size) % buf_size];
 | 
				
			||||||
 | 
					            BulletText("Frame %06d: %+3d ( %2d malloc, %2d free )", entry->FrameCount, entry->AllocCount - entry->FreeCount, entry->AllocCount, entry->FreeCount);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        TreePop();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (TreeNode("Inputs"))
 | 
					    if (TreeNode("Inputs"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Text("KEYBOARD/GAMEPAD/MOUSE KEYS");
 | 
					        Text("KEYBOARD/GAMEPAD/MOUSE KEYS");
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								imgui.h
									
									
									
									
									
								
							@@ -2039,11 +2039,6 @@ struct ImGuiIO
 | 
				
			|||||||
    // Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows)
 | 
					    // Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows)
 | 
				
			||||||
    // (default to use native imm32 api on Windows)
 | 
					    // (default to use native imm32 api on Windows)
 | 
				
			||||||
    void        (*SetPlatformImeDataFn)(ImGuiViewport* viewport, ImGuiPlatformImeData* data);
 | 
					    void        (*SetPlatformImeDataFn)(ImGuiViewport* viewport, ImGuiPlatformImeData* data);
 | 
				
			||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
 | 
					 | 
				
			||||||
    void*       ImeWindowHandle;                // = NULL           // [Obsoleted in 1.87] Set ImGuiViewport::PlatformHandleRaw instead. Set this to your HWND to get automatic IME cursor positioning.
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
    void*       _UnusedPadding;                                     // Unused field to keep data structure the same size.
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Optional: Platform locale
 | 
					    // Optional: Platform locale
 | 
				
			||||||
    ImWchar     PlatformLocaleDecimalPoint;     // '.'              // [Experimental] Configure decimal point e.g. '.' or ',' useful for some languages (e.g. German), generally pulled from *localeconv()->decimal_point
 | 
					    ImWchar     PlatformLocaleDecimalPoint;     // '.'              // [Experimental] Configure decimal point e.g. '.' or ',' useful for some languages (e.g. German), generally pulled from *localeconv()->decimal_point
 | 
				
			||||||
@@ -2090,7 +2085,6 @@ struct ImGuiIO
 | 
				
			|||||||
    int         MetricsRenderIndices;               // Indices output during last call to Render() = number of triangles * 3
 | 
					    int         MetricsRenderIndices;               // Indices output during last call to Render() = number of triangles * 3
 | 
				
			||||||
    int         MetricsRenderWindows;               // Number of visible windows
 | 
					    int         MetricsRenderWindows;               // Number of visible windows
 | 
				
			||||||
    int         MetricsActiveWindows;               // Number of active windows
 | 
					    int         MetricsActiveWindows;               // Number of active windows
 | 
				
			||||||
    int         MetricsActiveAllocations;           // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts.
 | 
					 | 
				
			||||||
    ImVec2      MouseDelta;                         // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
 | 
					    ImVec2      MouseDelta;                         // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Legacy: before 1.87, we required backend to fill io.KeyMap[] (imgui->native map) during initialization and io.KeysDown[] (native indices) every frame.
 | 
					    // Legacy: before 1.87, we required backend to fill io.KeyMap[] (imgui->native map) during initialization and io.KeysDown[] (native indices) every frame.
 | 
				
			||||||
@@ -2101,6 +2095,11 @@ struct ImGuiIO
 | 
				
			|||||||
    bool        KeysDown[ImGuiKey_COUNT];           // [LEGACY] Input: Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). This used to be [512] sized. It is now ImGuiKey_COUNT to allow legacy io.KeysDown[GetKeyIndex(...)] to work without an overflow.
 | 
					    bool        KeysDown[ImGuiKey_COUNT];           // [LEGACY] Input: Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). This used to be [512] sized. It is now ImGuiKey_COUNT to allow legacy io.KeysDown[GetKeyIndex(...)] to work without an overflow.
 | 
				
			||||||
    float       NavInputs[ImGuiNavInput_COUNT];     // [LEGACY] Since 1.88, NavInputs[] was removed. Backends from 1.60 to 1.86 won't build. Feed gamepad inputs via io.AddKeyEvent() and ImGuiKey_GamepadXXX enums.
 | 
					    float       NavInputs[ImGuiNavInput_COUNT];     // [LEGACY] Since 1.88, NavInputs[] was removed. Backends from 1.60 to 1.86 won't build. Feed gamepad inputs via io.AddKeyEvent() and ImGuiKey_GamepadXXX enums.
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
 | 
				
			||||||
 | 
					    void*       ImeWindowHandle;                    // = NULL   // [Obsoleted in 1.87] Set ImGuiViewport::PlatformHandleRaw instead. Set this to your HWND to get automatic IME cursor positioning.
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    void*       _UnusedPadding;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //------------------------------------------------------------------
 | 
					    //------------------------------------------------------------------
 | 
				
			||||||
    // [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed!
 | 
					    // [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed!
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1783,6 +1783,23 @@ enum ImGuiDebugLogFlags_
 | 
				
			|||||||
    ImGuiDebugLogFlags_OutputToTestEngine = 1 << 11,  // Also send output to Test Engine
 | 
					    ImGuiDebugLogFlags_OutputToTestEngine = 1 << 11,  // Also send output to Test Engine
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct ImGuiDebugAllocEntry
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int         FrameCount;
 | 
				
			||||||
 | 
					    ImS16       AllocCount;
 | 
				
			||||||
 | 
					    ImS16       FreeCount;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct ImGuiDebugAllocInfo
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int         TotalAllocCount;            // Number of call to MemAlloc().
 | 
				
			||||||
 | 
					    int         TotalFreeCount;
 | 
				
			||||||
 | 
					    ImS16       LastEntriesIdx;             // Current index in buffer
 | 
				
			||||||
 | 
					    ImGuiDebugAllocEntry LastEntriesBuf[6]; // Track last 6 frames that had allocations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ImGuiDebugAllocInfo() { memset(this, 0, sizeof(*this)); }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct ImGuiMetricsConfig
 | 
					struct ImGuiMetricsConfig
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    bool        ShowDebugLog = false;
 | 
					    bool        ShowDebugLog = false;
 | 
				
			||||||
@@ -2133,6 +2150,7 @@ struct ImGuiContext
 | 
				
			|||||||
    ImGuiID                 DebugItemPickerBreakId;             // Will call IM_DEBUG_BREAK() when encountering this ID
 | 
					    ImGuiID                 DebugItemPickerBreakId;             // Will call IM_DEBUG_BREAK() when encountering this ID
 | 
				
			||||||
    ImGuiMetricsConfig      DebugMetricsConfig;
 | 
					    ImGuiMetricsConfig      DebugMetricsConfig;
 | 
				
			||||||
    ImGuiIdStackTool        DebugIdStackTool;
 | 
					    ImGuiIdStackTool        DebugIdStackTool;
 | 
				
			||||||
 | 
					    ImGuiDebugAllocInfo     DebugAllocInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Misc
 | 
					    // Misc
 | 
				
			||||||
    float                   FramerateSecPerFrame[60];           // Calculate estimate of framerate for user over the last 60 frames..
 | 
					    float                   FramerateSecPerFrame[60];           // Calculate estimate of framerate for user over the last 60 frames..
 | 
				
			||||||
@@ -3326,6 +3344,7 @@ namespace ImGui
 | 
				
			|||||||
    // Debug Log
 | 
					    // Debug Log
 | 
				
			||||||
    IMGUI_API void          DebugLog(const char* fmt, ...) IM_FMTARGS(1);
 | 
					    IMGUI_API void          DebugLog(const char* fmt, ...) IM_FMTARGS(1);
 | 
				
			||||||
    IMGUI_API void          DebugLogV(const char* fmt, va_list args) IM_FMTLIST(1);
 | 
					    IMGUI_API void          DebugLogV(const char* fmt, va_list args) IM_FMTLIST(1);
 | 
				
			||||||
 | 
					    IMGUI_API void          DebugAllocHook(ImGuiDebugAllocInfo* info, int frame_count, void* ptr, size_t size); // size >= 0 : alloc, size = -1 : free
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Debug Tools
 | 
					    // Debug Tools
 | 
				
			||||||
    IMGUI_API void          ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
 | 
					    IMGUI_API void          ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user