|
@@ -399,6 +399,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.
|
|
|
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
|
|
|
|
|
+ - 2023/07/12 (1.89.8) - ImDrawData: CmdLists now owned, changed from ImDrawList** to ImVector<ImDrawList*>. Majority of users shouldn't be affected, but you cannot compare to NULL nor reassign manually anymore. Instead use AddDrawList(). (#6406, #4879, #1878)
|
|
|
- 2023/06/28 (1.89.7) - overlapping items: obsoleted 'SetItemAllowOverlap()' (called after item) in favor of calling 'SetNextItemAllowOverlap()' (called before item). 'SetItemAllowOverlap()' didn't and couldn't work reliably since 1.89 (2022-11-15).
|
|
|
- 2023/06/28 (1.89.7) - overlapping items: renamed 'ImGuiTreeNodeFlags_AllowItemOverlap' to 'ImGuiTreeNodeFlags_AllowOverlap', 'ImGuiSelectableFlags_AllowItemOverlap' to 'ImGuiSelectableFlags_AllowOverlap'. Kept redirecting enums (will obsolete).
|
|
|
- 2023/06/28 (1.89.7) - overlapping items: IsItemHovered() now by default return false when querying an item using AllowOverlap mode which is being overlapped. Use ImGuiHoveredFlags_AllowWhenOverlappedByItem to revert to old behavior.
|
|
@@ -4823,7 +4824,7 @@ static void AddWindowToDrawData(ImGuiWindow* window, int layer)
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
ImGuiViewportP* viewport = g.Viewports[0];
|
|
|
g.IO.MetricsRenderWindows++;
|
|
|
- AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[layer], window->DrawList);
|
|
|
+ AddDrawListToDrawData(viewport->DrawDataBuilder.Layers[layer], window->DrawList);
|
|
|
for (int i = 0; i < window->DC.ChildWindows.Size; i++)
|
|
|
{
|
|
|
ImGuiWindow* child = window->DC.ChildWindows[i];
|
|
@@ -4845,36 +4846,36 @@ static inline void AddRootWindowToDrawData(ImGuiWindow* window)
|
|
|
|
|
|
void ImDrawDataBuilder::FlattenIntoSingleLayer()
|
|
|
{
|
|
|
- int n = Layers[0].Size;
|
|
|
- int size = n;
|
|
|
+ int n = Layers[0]->Size;
|
|
|
+ int full_size = n;
|
|
|
for (int i = 1; i < IM_ARRAYSIZE(Layers); i++)
|
|
|
- size += Layers[i].Size;
|
|
|
- Layers[0].resize(size);
|
|
|
+ full_size += Layers[i]->Size;
|
|
|
+ Layers[0]->resize(full_size);
|
|
|
for (int layer_n = 1; layer_n < IM_ARRAYSIZE(Layers); layer_n++)
|
|
|
{
|
|
|
- ImVector<ImDrawList*>& layer = Layers[layer_n];
|
|
|
- if (layer.empty())
|
|
|
+ ImVector<ImDrawList*>* layer = Layers[layer_n];
|
|
|
+ if (layer->empty())
|
|
|
continue;
|
|
|
- memcpy(&Layers[0][n], &layer[0], layer.Size * sizeof(ImDrawList*));
|
|
|
- n += layer.Size;
|
|
|
- layer.resize(0);
|
|
|
+ memcpy(Layers[0]->Data + n, layer->Data, layer->Size * sizeof(ImDrawList*));
|
|
|
+ n += layer->Size;
|
|
|
+ layer->resize(0);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void SetupViewportDrawData(ImGuiViewportP* viewport, ImVector<ImDrawList*>* draw_lists)
|
|
|
+static void SetupViewportDrawData(ImGuiViewportP* viewport)
|
|
|
{
|
|
|
ImGuiIO& io = ImGui::GetIO();
|
|
|
ImDrawData* draw_data = &viewport->DrawDataP;
|
|
|
draw_data->Valid = true;
|
|
|
- draw_data->CmdLists = (draw_lists->Size > 0) ? draw_lists->Data : NULL;
|
|
|
- draw_data->CmdListsCount = draw_lists->Size;
|
|
|
+ draw_data->CmdListsCount = draw_data->CmdLists.Size;
|
|
|
draw_data->TotalVtxCount = draw_data->TotalIdxCount = 0;
|
|
|
draw_data->DisplayPos = viewport->Pos;
|
|
|
draw_data->DisplaySize = viewport->Size;
|
|
|
draw_data->FramebufferScale = io.DisplayFramebufferScale;
|
|
|
- for (int n = 0; n < draw_lists->Size; n++)
|
|
|
+ draw_data->OwnerViewport = viewport;
|
|
|
+ for (int n = 0; n < draw_data->CmdLists.Size; n++)
|
|
|
{
|
|
|
- ImDrawList* draw_list = draw_lists->Data[n];
|
|
|
+ ImDrawList* draw_list = draw_data->CmdLists[n];
|
|
|
draw_list->_PopUnusedDrawCmd();
|
|
|
draw_data->TotalVtxCount += draw_list->VtxBuffer.Size;
|
|
|
draw_data->TotalIdxCount += draw_list->IdxBuffer.Size;
|
|
@@ -5099,9 +5100,9 @@ void ImGui::Render()
|
|
|
for (int n = 0; n != g.Viewports.Size; n++)
|
|
|
{
|
|
|
ImGuiViewportP* viewport = g.Viewports[n];
|
|
|
- viewport->DrawDataBuilder.Clear();
|
|
|
+ viewport->DrawDataBuilder.Setup(&viewport->DrawDataP);
|
|
|
if (viewport->DrawLists[0] != NULL)
|
|
|
- AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[0], GetBackgroundDrawList(viewport));
|
|
|
+ AddDrawListToDrawData(viewport->DrawDataBuilder.Layers[0], GetBackgroundDrawList(viewport));
|
|
|
}
|
|
|
|
|
|
// Draw modal/window whitening backgrounds
|
|
@@ -5136,9 +5137,9 @@ void ImGui::Render()
|
|
|
|
|
|
// Add foreground ImDrawList (for each active viewport)
|
|
|
if (viewport->DrawLists[1] != NULL)
|
|
|
- AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[0], GetForegroundDrawList(viewport));
|
|
|
+ AddDrawListToDrawData(viewport->DrawDataBuilder.Layers[0], GetForegroundDrawList(viewport));
|
|
|
|
|
|
- SetupViewportDrawData(viewport, &viewport->DrawDataBuilder.Layers[0]);
|
|
|
+ SetupViewportDrawData(viewport);
|
|
|
ImDrawData* draw_data = &viewport->DrawDataP;
|
|
|
g.IO.MetricsRenderVertices += draw_data->TotalVtxCount;
|
|
|
g.IO.MetricsRenderIndices += draw_data->TotalIdxCount;
|
|
@@ -13862,7 +13863,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
// DrawLists
|
|
|
int drawlist_count = 0;
|
|
|
for (int viewport_i = 0; viewport_i < g.Viewports.Size; viewport_i++)
|
|
|
- drawlist_count += g.Viewports[viewport_i]->DrawDataBuilder.GetDrawListCount();
|
|
|
+ drawlist_count += g.Viewports[viewport_i]->DrawDataP.CmdLists.Size;
|
|
|
if (TreeNode("DrawLists", "DrawLists (%d)", drawlist_count))
|
|
|
{
|
|
|
Checkbox("Show ImDrawCmd mesh when hovering", &cfg->ShowDrawCmdMesh);
|
|
@@ -13870,9 +13871,8 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
for (int viewport_i = 0; viewport_i < g.Viewports.Size; viewport_i++)
|
|
|
{
|
|
|
ImGuiViewportP* viewport = g.Viewports[viewport_i];
|
|
|
- for (int layer_i = 0; layer_i < IM_ARRAYSIZE(viewport->DrawDataBuilder.Layers); layer_i++)
|
|
|
- for (int draw_list_i = 0; draw_list_i < viewport->DrawDataBuilder.Layers[layer_i].Size; draw_list_i++)
|
|
|
- DebugNodeDrawList(NULL, viewport->DrawDataBuilder.Layers[layer_i][draw_list_i], "DrawList");
|
|
|
+ for (int draw_list_i = 0; draw_list_i < viewport->DrawDataP.CmdLists.Size; draw_list_i++)
|
|
|
+ DebugNodeDrawList(NULL, viewport, viewport->DrawDataP.CmdLists[draw_list_i], "DrawList");
|
|
|
}
|
|
|
TreePop();
|
|
|
}
|
|
@@ -14204,9 +14204,10 @@ void ImGui::DebugNodeColumns(ImGuiOldColumns* columns)
|
|
|
}
|
|
|
|
|
|
// [DEBUG] Display contents of ImDrawList
|
|
|
-void ImGui::DebugNodeDrawList(ImGuiWindow* window, const ImDrawList* draw_list, const char* label)
|
|
|
+void ImGui::DebugNodeDrawList(ImGuiWindow* window, ImGuiViewportP* viewport, const ImDrawList* draw_list, const char* label)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
+ IM_UNUSED(viewport); // Used in docking branch
|
|
|
ImGuiMetricsConfig* cfg = &g.DebugMetricsConfig;
|
|
|
int cmd_count = draw_list->CmdBuffer.Size;
|
|
|
if (cmd_count > 0 && draw_list->CmdBuffer.back().ElemCount == 0 && draw_list->CmdBuffer.back().UserCallback == NULL)
|
|
@@ -14495,9 +14496,8 @@ void ImGui::DebugNodeViewport(ImGuiViewportP* viewport)
|
|
|
(flags & ImGuiViewportFlags_IsPlatformWindow) ? " IsPlatformWindow" : "",
|
|
|
(flags & ImGuiViewportFlags_IsPlatformMonitor) ? " IsPlatformMonitor" : "",
|
|
|
(flags & ImGuiViewportFlags_OwnedByApp) ? " OwnedByApp" : "");
|
|
|
- for (int layer_i = 0; layer_i < IM_ARRAYSIZE(viewport->DrawDataBuilder.Layers); layer_i++)
|
|
|
- for (int draw_list_i = 0; draw_list_i < viewport->DrawDataBuilder.Layers[layer_i].Size; draw_list_i++)
|
|
|
- DebugNodeDrawList(NULL, viewport->DrawDataBuilder.Layers[layer_i][draw_list_i], "DrawList");
|
|
|
+ for (int draw_list_i = 0; draw_list_i < viewport->DrawDataP.CmdLists.Size; draw_list_i++)
|
|
|
+ DebugNodeDrawList(NULL, viewport, viewport->DrawDataP.CmdLists[draw_list_i], "DrawList");
|
|
|
TreePop();
|
|
|
}
|
|
|
}
|
|
@@ -14525,7 +14525,7 @@ void ImGui::DebugNodeWindow(ImGuiWindow* window, const char* label)
|
|
|
TextDisabled("Note: some memory buffers have been compacted/freed.");
|
|
|
|
|
|
ImGuiWindowFlags flags = window->Flags;
|
|
|
- DebugNodeDrawList(window, window->DrawList, "DrawList");
|
|
|
+ DebugNodeDrawList(window, window->Viewport, window->DrawList, "DrawList");
|
|
|
BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), ContentSize (%.1f,%.1f) Ideal (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->ContentSize.x, window->ContentSize.y, window->ContentSizeIdeal.x, window->ContentSizeIdeal.y);
|
|
|
BulletText("Flags: 0x%08X (%s%s%s%s%s%s%s%s%s..)", flags,
|
|
|
(flags & ImGuiWindowFlags_ChildWindow) ? "Child " : "", (flags & ImGuiWindowFlags_Tooltip) ? "Tooltip " : "", (flags & ImGuiWindowFlags_Popup) ? "Popup " : "",
|