Skip to content

Commit 47d1ab1

Browse files
committed
Merge branch 'master' into docking
# Conflicts: # backends/imgui_impl_vulkan.cpp # imgui_widgets.cpp
2 parents 9fdeb41 + 39f34e1 commit 47d1ab1

11 files changed

+210
-57
lines changed

Diff for: backends/imgui_impl_sdlgpu3.cpp

+33-36
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
// Calling the function is MANDATORY, otherwise the ImGui will not upload neither the vertex nor the index buffer for the GPU. See imgui_impl_sdlgpu3.cpp for more info.
2424

2525
// CHANGELOG
26+
// 2025-03-30: Made ImGui_ImplSDLGPU3_PrepareDrawData() reuse GPU Transfer Buffers which were unusually slow to recreate every frame. Much faster now.
2627
// 2025-03-21: Fixed typo in function name Imgui_ImplSDLGPU3_PrepareDrawData() -> ImGui_ImplSDLGPU3_PrepareDrawData().
2728
// 2025-01-16: Renamed ImGui_ImplSDLGPU3_InitInfo::GpuDevice to Device.
2829
// 2025-01-09: SDL_GPU: Added the SDL_GPU3 backend.
@@ -37,10 +38,12 @@
3738
// Reusable buffers used for rendering 1 current in-flight frame, for ImGui_ImplSDLGPU3_RenderDrawData()
3839
struct ImGui_ImplSDLGPU3_FrameData
3940
{
40-
SDL_GPUBuffer* VertexBuffer = nullptr;
41-
SDL_GPUBuffer* IndexBuffer = nullptr;
42-
uint32_t VertexBufferSize = 0;
43-
uint32_t IndexBufferSize = 0;
41+
SDL_GPUBuffer* VertexBuffer = nullptr;
42+
SDL_GPUTransferBuffer* VertexTransferBuffer = nullptr;
43+
uint32_t VertexBufferSize = 0;
44+
SDL_GPUBuffer* IndexBuffer = nullptr;
45+
SDL_GPUTransferBuffer* IndexTransferBuffer = nullptr;
46+
uint32_t IndexBufferSize = 0;
4447
};
4548

4649
struct ImGui_ImplSDLGPU3_Data
@@ -116,14 +119,15 @@ static void ImGui_ImplSDLGPU3_SetupRenderState(ImDrawData* draw_data, SDL_GPUGra
116119
SDL_PushGPUVertexUniformData(command_buffer, 0, &ubo, sizeof(UBO));
117120
}
118121

119-
static void CreateOrResizeBuffer(SDL_GPUBuffer** buffer, uint32_t* old_size, uint32_t new_size, SDL_GPUBufferUsageFlags usage)
122+
static void CreateOrResizeBuffers(SDL_GPUBuffer** buffer, SDL_GPUTransferBuffer** transferbuffer, uint32_t* old_size, uint32_t new_size, SDL_GPUBufferUsageFlags usage)
120123
{
121124
ImGui_ImplSDLGPU3_Data* bd = ImGui_ImplSDLGPU3_GetBackendData();
122125
ImGui_ImplSDLGPU3_InitInfo* v = &bd->InitInfo;
123126

124-
// Even though this is fairly rarely called.
127+
// FIXME-OPT: Not optimal, but this is fairly rarely called.
125128
SDL_WaitForGPUIdle(v->Device);
126129
SDL_ReleaseGPUBuffer(v->Device, *buffer);
130+
SDL_ReleaseGPUTransferBuffer(v->Device, *transferbuffer);
127131

128132
SDL_GPUBufferCreateInfo buffer_info = {};
129133
buffer_info.usage = usage;
@@ -132,6 +136,12 @@ static void CreateOrResizeBuffer(SDL_GPUBuffer** buffer, uint32_t* old_size, uin
132136
*buffer = SDL_CreateGPUBuffer(v->Device, &buffer_info);
133137
*old_size = new_size;
134138
IM_ASSERT(*buffer != nullptr && "Failed to create GPU Buffer, call SDL_GetError() for more information");
139+
140+
SDL_GPUTransferBufferCreateInfo transferbuffer_info = {};
141+
transferbuffer_info.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD;
142+
transferbuffer_info.size = new_size;
143+
*transferbuffer = SDL_CreateGPUTransferBuffer(v->Device, &transferbuffer_info);
144+
IM_ASSERT(*transferbuffer != nullptr && "Failed to create GPU Transfer Buffer, call SDL_GetError() for more information");
135145
}
136146

137147
// SDL_GPU doesn't allow copy passes to occur while a render or compute pass is bound!
@@ -152,25 +162,12 @@ void ImGui_ImplSDLGPU3_PrepareDrawData(ImDrawData* draw_data, SDL_GPUCommandBuff
152162
uint32_t vertex_size = draw_data->TotalVtxCount * sizeof(ImDrawVert);
153163
uint32_t index_size = draw_data->TotalIdxCount * sizeof(ImDrawIdx);
154164
if (fd->VertexBuffer == nullptr || fd->VertexBufferSize < vertex_size)
155-
CreateOrResizeBuffer(&fd->VertexBuffer, &fd->VertexBufferSize, vertex_size, SDL_GPU_BUFFERUSAGE_VERTEX);
165+
CreateOrResizeBuffers(&fd->VertexBuffer, &fd->VertexTransferBuffer, &fd->VertexBufferSize, vertex_size, SDL_GPU_BUFFERUSAGE_VERTEX);
156166
if (fd->IndexBuffer == nullptr || fd->IndexBufferSize < index_size)
157-
CreateOrResizeBuffer(&fd->IndexBuffer, &fd->IndexBufferSize, index_size, SDL_GPU_BUFFERUSAGE_INDEX);
158-
159-
// FIXME: It feels like more code could be shared there.
160-
SDL_GPUTransferBufferCreateInfo vertex_transferbuffer_info = {};
161-
vertex_transferbuffer_info.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD;
162-
vertex_transferbuffer_info.size = vertex_size;
163-
SDL_GPUTransferBufferCreateInfo index_transferbuffer_info = {};
164-
index_transferbuffer_info.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD;
165-
index_transferbuffer_info.size = index_size;
166-
167-
SDL_GPUTransferBuffer* vertex_transferbuffer = SDL_CreateGPUTransferBuffer(v->Device, &vertex_transferbuffer_info);
168-
IM_ASSERT(vertex_transferbuffer != nullptr && "Failed to create the vertex transfer buffer, call SDL_GetError() for more information");
169-
SDL_GPUTransferBuffer* index_transferbuffer = SDL_CreateGPUTransferBuffer(v->Device, &index_transferbuffer_info);
170-
IM_ASSERT(index_transferbuffer != nullptr && "Failed to create the index transfer buffer, call SDL_GetError() for more information");
171-
172-
ImDrawVert* vtx_dst = (ImDrawVert*)SDL_MapGPUTransferBuffer(v->Device, vertex_transferbuffer, true);
173-
ImDrawIdx* idx_dst = (ImDrawIdx*)SDL_MapGPUTransferBuffer(v->Device, index_transferbuffer, true);
167+
CreateOrResizeBuffers(&fd->IndexBuffer, &fd->IndexTransferBuffer, &fd->IndexBufferSize, index_size, SDL_GPU_BUFFERUSAGE_INDEX);
168+
169+
ImDrawVert* vtx_dst = (ImDrawVert*)SDL_MapGPUTransferBuffer(v->Device, fd->VertexTransferBuffer, true);
170+
ImDrawIdx* idx_dst = (ImDrawIdx*)SDL_MapGPUTransferBuffer(v->Device, fd->IndexTransferBuffer, true);
174171
for (int n = 0; n < draw_data->CmdListsCount; n++)
175172
{
176173
const ImDrawList* draw_list = draw_data->CmdLists[n];
@@ -179,15 +176,15 @@ void ImGui_ImplSDLGPU3_PrepareDrawData(ImDrawData* draw_data, SDL_GPUCommandBuff
179176
vtx_dst += draw_list->VtxBuffer.Size;
180177
idx_dst += draw_list->IdxBuffer.Size;
181178
}
182-
SDL_UnmapGPUTransferBuffer(v->Device, vertex_transferbuffer);
183-
SDL_UnmapGPUTransferBuffer(v->Device, index_transferbuffer);
179+
SDL_UnmapGPUTransferBuffer(v->Device, fd->VertexTransferBuffer);
180+
SDL_UnmapGPUTransferBuffer(v->Device, fd->IndexTransferBuffer);
184181

185182
SDL_GPUTransferBufferLocation vertex_buffer_location = {};
186183
vertex_buffer_location.offset = 0;
187-
vertex_buffer_location.transfer_buffer = vertex_transferbuffer;
184+
vertex_buffer_location.transfer_buffer = fd->VertexTransferBuffer;
188185
SDL_GPUTransferBufferLocation index_buffer_location = {};
189186
index_buffer_location.offset = 0;
190-
index_buffer_location.transfer_buffer = index_transferbuffer;
187+
index_buffer_location.transfer_buffer = fd->IndexTransferBuffer;
191188

192189
SDL_GPUBufferRegion vertex_buffer_region = {};
193190
vertex_buffer_region.buffer = fd->VertexBuffer;
@@ -203,8 +200,6 @@ void ImGui_ImplSDLGPU3_PrepareDrawData(ImDrawData* draw_data, SDL_GPUCommandBuff
203200
SDL_UploadToGPUBuffer(copy_pass, &vertex_buffer_location, &vertex_buffer_region, true);
204201
SDL_UploadToGPUBuffer(copy_pass, &index_buffer_location, &index_buffer_region, true);
205202
SDL_EndGPUCopyPass(copy_pass);
206-
SDL_ReleaseGPUTransferBuffer(v->Device, index_transferbuffer);
207-
SDL_ReleaseGPUTransferBuffer(v->Device, vertex_transferbuffer);
208203
}
209204

210205
void ImGui_ImplSDLGPU3_RenderDrawData(ImDrawData* draw_data, SDL_GPUCommandBuffer* command_buffer, SDL_GPURenderPass* render_pass, SDL_GPUGraphicsPipeline* pipeline)
@@ -549,12 +544,14 @@ void ImGui_ImplSDLGPU3_DestroyFrameData()
549544
ImGui_ImplSDLGPU3_Data* bd = ImGui_ImplSDLGPU3_GetBackendData();
550545
ImGui_ImplSDLGPU3_InitInfo* v = &bd->InitInfo;
551546

552-
SDL_ReleaseGPUBuffer(v->Device, bd->MainWindowFrameData.VertexBuffer);
553-
SDL_ReleaseGPUBuffer(v->Device, bd->MainWindowFrameData.IndexBuffer);
554-
bd->MainWindowFrameData.VertexBuffer = nullptr;
555-
bd->MainWindowFrameData.IndexBuffer = nullptr;
556-
bd->MainWindowFrameData.VertexBufferSize = 0;
557-
bd->MainWindowFrameData.IndexBufferSize = 0;
547+
ImGui_ImplSDLGPU3_FrameData* fd = &bd->MainWindowFrameData;
548+
SDL_ReleaseGPUBuffer(v->Device, fd->VertexBuffer);
549+
SDL_ReleaseGPUBuffer(v->Device, fd->IndexBuffer);
550+
SDL_ReleaseGPUTransferBuffer(v->Device, fd->VertexTransferBuffer);
551+
SDL_ReleaseGPUTransferBuffer(v->Device, fd->IndexTransferBuffer);
552+
fd->VertexBuffer = fd->IndexBuffer = nullptr;
553+
fd->VertexTransferBuffer = fd->IndexTransferBuffer = nullptr;
554+
fd->VertexBufferSize = fd->IndexBufferSize = 0;
558555
}
559556

560557
void ImGui_ImplSDLGPU3_DestroyDeviceObjects()

Diff for: backends/imgui_impl_vulkan.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
// CHANGELOG
2929
// (minor and older changes stripped away, please see git history for details)
3030
// 2025-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
31+
// 2025-04-07: Vulkan: Deep-copy ImGui_ImplVulkan_InitInfo::PipelineRenderingCreateInfo's pColorAttachmentFormats buffer when set, in order to reduce common user-error of specifying a pointer to data that gets out of scope. (#8282)
3132
// 2025-02-14: *BREAKING CHANGE*: Added uint32_t api_version to ImGui_ImplVulkan_LoadFunctions().
3233
// 2025-02-13: Vulkan: Added ApiVersion field in ImGui_ImplVulkan_InitInfo. Default to header version if unspecified. Dynamic rendering path loads "vkCmdBeginRendering/vkCmdEndRendering" (without -KHR suffix) on API 1.3. (#8326)
3334
// 2025-01-09: Vulkan: Added IMGUI_IMPL_VULKAN_MINIMUM_IMAGE_SAMPLER_POOL_SIZE to clarify how many image sampler descriptors are expected to be available in descriptor pool. (#6642)
@@ -1207,6 +1208,16 @@ bool ImGui_ImplVulkan_Init(ImGui_ImplVulkan_InitInfo* info)
12071208
IM_ASSERT(info->RenderPass != VK_NULL_HANDLE);
12081209

12091210
bd->VulkanInitInfo = *info;
1211+
#ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
1212+
ImGui_ImplVulkan_InitInfo* v = &bd->VulkanInitInfo;
1213+
if (v->PipelineRenderingCreateInfo.pColorAttachmentFormats != NULL)
1214+
{
1215+
// Deep copy buffer to reduce error-rate for end user (#8282)
1216+
VkFormat* formats_copy = (VkFormat*)IM_ALLOC(sizeof(VkFormat) * v->PipelineRenderingCreateInfo.colorAttachmentCount);
1217+
memcpy(formats_copy, v->PipelineRenderingCreateInfo.pColorAttachmentFormats, sizeof(VkFormat) * v->PipelineRenderingCreateInfo.colorAttachmentCount);
1218+
v->PipelineRenderingCreateInfo.pColorAttachmentFormats = formats_copy;
1219+
}
1220+
#endif
12101221

12111222
ImGui_ImplVulkan_CreateDeviceObjects();
12121223

@@ -1227,6 +1238,9 @@ void ImGui_ImplVulkan_Shutdown()
12271238

12281239
// First destroy objects in all viewports
12291240
ImGui_ImplVulkan_DestroyDeviceObjects();
1241+
#ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
1242+
IM_FREE((void*)bd->VulkanInitInfo.PipelineRenderingCreateInfo.pColorAttachmentFormats);
1243+
#endif
12301244

12311245
// Manually delete main viewport render data in-case we haven't initialized for viewports
12321246
ImGuiViewport* main_viewport = ImGui::GetMainViewport();

Diff for: docs/CHANGELOG.txt

+22-1
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,38 @@ Other changes:
5252
codepath that preserve last contents size when collapsed, resulting in
5353
programmatically uncollapsing auto-sizing windows having them flicker size
5454
for a frame. (#7691) [@achabense]
55+
- Windows: loosened code to allow hovering of resize grips, borders, and table
56+
borders while hovering a sibling child window, so that the code in master matches
57+
one in docking (they accidentally diverged). (#8554)
58+
- TreeNode: added flags to draw tree hierarchy outlines linking parent
59+
and tree nodes: (#2920)
60+
- ImGuiTreeNodeFlags_DrawLinesNone: No lines drawn.
61+
- ImGuiTreeNodeFlags_DrawLinesFull: Horizontal lines to child nodes. Vertical line drawn down to TreePop() position: cover full contents.
62+
- ImGuiTreeNodeFlags_DrawLinesToNodes: Horizontal lines to child nodes. Vertical line drawn down to bottom-most child node.
63+
- Added style.TreeLinesFlags which stores the default setting,
64+
which may be overriden in individual TreeNode() calls.
65+
- Added style.TreeLinesSize (default to 1.0f).
66+
- Added ImGuiCol_TreeLines (in default style this is the same as ImGuiCol_Border).
67+
- The feature adds a little cost as extra data needs to be stored.
5568
- Nav: fixed assertion when holding gamepad FaceLeft/West button to open
5669
CTRL+Tab windowing + pressing a keyboard key. (#8525)
5770
- Error Handling: added better error report and recovery for extraneous
5871
EndPopup() call. (#1651, #8499)
72+
- Fonts: word-wrapping code handle ideographic comma & full stop (U+3001, U+3002). (#8540)
73+
- Fonts: fixed CalcWordWrapPositionA() fallback when width is too small to wrap:
74+
would use a +1 offset instead of advancing to the next UTF-8 codepoint. (#8540)
5975
- Style, InputText: added ImGuiCol_InputTextCursor to configure color of
6076
the InputText cursor/caret. (#7031)
6177
- Misc: added extra operators to ImVec4 in IMGUI_DEFINE_MATH_OPERATORS block. (#8510) [@gan74]
6278
- Backends: SDL2, SDL3, OSX: Fill gamepad inputs and set ImGuiBackendFlags_HasGamepad
6379
regardless of ImGuiConfigFlags_NavEnableGamepad being set. (#8508)
6480
- Backends: SDL3: Update for SDL3 api changes: revert SDL_GetClipboardText()
6581
memory ownership change. (#8530, #7801) [@Green-Sky]
82+
- Backends: SDLGPU3: Made ImGui_ImplSDLGPU3_PrepareDrawData() reuse GPU Transfer Buffers which
83+
were unusually slow to recreate every frame. Much faster now. (#8534) [@ocornut, @TheMode]
84+
- Backends: Vulkan: Deep-copy ImGui_ImplVulkan_InitInfo::PipelineRenderingCreateInfo's
85+
pColorAttachmentFormats buffer when set, in order to reduce common user-error of
86+
specifying a pointer to data that gets out of scope. (#8282)
6687

6788
Docking+Viewports Branch:
6889

@@ -581,7 +602,7 @@ Other changes:
581602
- Set io.ConfigNavCursorVisibleAuto = true (default) to enable automatic toggling
582603
of cursor visibility (mouse click hide the cursor, arrow keys makes it visible).
583604
- Set io.ConfigNavCursorVisibleAlways to keep cursor always visible.
584-
- Nav: added NavSetCursorVisible(bool visible) function to manipulate visibility of
605+
- Nav: added SetNavCursorVisible(bool visible) function to manipulate visibility of
585606
navigation cursor (e.g. set default state, or after some actions). (#1074, #2048, #7237, #8059)
586607
- Nav: added io.ConfigNavEscapeClearFocusItem and io.ConfigNavEscapeClearFocusWindow to change
587608
how pressing Escape affects navigation. (#8059, #2048, #1074, #3200)

Diff for: docs/EXAMPLES.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Allegro 5 example. <BR>
5858
Android + OpenGL3 (ES) example. <BR>
5959
= main.cpp + imgui_impl_android.cpp + imgui_impl_opengl3.cpp
6060

61-
[example_apple_metal/](https://github.com/ocornut/imgui/blob/master/examples/example_metal/) <BR>
61+
[example_apple_metal/](https://github.com/ocornut/imgui/tree/master/examples/example_apple_metal/) <BR>
6262
OSX & iOS + Metal example. <BR>
6363
= main.m + imgui_impl_osx.mm + imgui_impl_metal.mm <BR>
6464
It is based on the "cross-platform" game template provided with Xcode as of Xcode 9.

Diff for: imgui.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -1385,6 +1385,8 @@ ImGuiStyle::ImGuiStyle()
13851385
TabBarOverlineSize = 1.0f; // Thickness of tab-bar overline, which highlights the selected tab-bar.
13861386
TableAngledHeadersAngle = 35.0f * (IM_PI / 180.0f); // Angle of angled headers (supported values range from -50 degrees to +50 degrees).
13871387
TableAngledHeadersTextAlign = ImVec2(0.5f,0.0f);// Alignment of angled headers within the cell
1388+
TreeLinesFlags = ImGuiTreeNodeFlags_DrawLinesNone;
1389+
TreeLinesSize = 1.0f; // Thickness of outlines when using ImGuiTreeNodeFlags_DrawLines.
13881390
ColorButtonPosition = ImGuiDir_Right; // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
13891391
ButtonTextAlign = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text.
13901392
SelectableTextAlign = ImVec2(0.0f,0.0f);// Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
@@ -3480,6 +3482,7 @@ static const ImGuiStyleVarInfo GStyleVarsInfo[] =
34803482
{ 1, ImGuiDataType_Float, (ImU32)offsetof(ImGuiStyle, TabBarOverlineSize) }, // ImGuiStyleVar_TabBarOverlineSize
34813483
{ 1, ImGuiDataType_Float, (ImU32)offsetof(ImGuiStyle, TableAngledHeadersAngle)}, // ImGuiStyleVar_TableAngledHeadersAngle
34823484
{ 2, ImGuiDataType_Float, (ImU32)offsetof(ImGuiStyle, TableAngledHeadersTextAlign)},// ImGuiStyleVar_TableAngledHeadersTextAlign
3485+
{ 1, ImGuiDataType_Float, (ImU32)offsetof(ImGuiStyle, TreeLinesSize)}, // ImGuiStyleVar_TreeLinesSize
34833486
{ 2, ImGuiDataType_Float, (ImU32)offsetof(ImGuiStyle, ButtonTextAlign) }, // ImGuiStyleVar_ButtonTextAlign
34843487
{ 2, ImGuiDataType_Float, (ImU32)offsetof(ImGuiStyle, SelectableTextAlign) }, // ImGuiStyleVar_SelectableTextAlign
34853488
{ 1, ImGuiDataType_Float, (ImU32)offsetof(ImGuiStyle, SeparatorTextBorderSize)}, // ImGuiStyleVar_SeparatorTextBorderSize
@@ -3631,6 +3634,7 @@ const char* ImGui::GetStyleColorName(ImGuiCol idx)
36313634
case ImGuiCol_TableRowBgAlt: return "TableRowBgAlt";
36323635
case ImGuiCol_TextLink: return "TextLink";
36333636
case ImGuiCol_TextSelectedBg: return "TextSelectedBg";
3637+
case ImGuiCol_TreeLines: return "TreeLines";
36343638
case ImGuiCol_DragDropTarget: return "DragDropTarget";
36353639
case ImGuiCol_NavCursor: return "NavCursor";
36363640
case ImGuiCol_NavWindowingHighlight: return "NavWindowingHighlight";
@@ -10869,6 +10873,7 @@ static void ImGui::ErrorCheckNewFrameSanityChecks()
1086910873
IM_ASSERT(g.Style.WindowBorderHoverPadding > 0.0f && "Invalid style setting!"); // Required otherwise cannot resize from borders.
1087010874
IM_ASSERT(g.Style.WindowMenuButtonPosition == ImGuiDir_None || g.Style.WindowMenuButtonPosition == ImGuiDir_Left || g.Style.WindowMenuButtonPosition == ImGuiDir_Right);
1087110875
IM_ASSERT(g.Style.ColorButtonPosition == ImGuiDir_Left || g.Style.ColorButtonPosition == ImGuiDir_Right);
10876+
IM_ASSERT(g.Style.TreeLinesFlags == ImGuiTreeNodeFlags_DrawLinesNone || g.Style.TreeLinesFlags == ImGuiTreeNodeFlags_DrawLinesFull || g.Style.TreeLinesFlags == ImGuiTreeNodeFlags_DrawLinesToNodes);
1087210877

1087310878
// Error handling: we do not accept 100% silent recovery! Please contact me if you feel this is getting in your way.
1087410879
if (g.IO.ConfigErrorRecovery)
@@ -13487,7 +13492,7 @@ void ImGui::NavMoveRequestResolveWithLastItem(ImGuiNavItemData* result)
1348713492
}
1348813493

1348913494
// Called by TreePop() to implement ImGuiTreeNodeFlags_NavLeftJumpsBackHere
13490-
void ImGui::NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, ImGuiTreeNodeStackData* tree_node_data)
13495+
void ImGui::NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, const ImGuiTreeNodeStackData* tree_node_data)
1349113496
{
1349213497
ImGuiContext& g = *GImGui;
1349313498
g.NavMoveScoringItems = false;

0 commit comments

Comments
 (0)