ImDrawList: Automatically calling ChannelsMerge() if not done after a split.

Ties fixing f422e78 in docking: iterating root windows was incorrect. Will be faster to lazily merge in RenderDimmedBackground() rather than iterate all.
This commit is contained in:
ocornut 2023-08-30 15:22:36 +02:00
parent f93d0befaf
commit 08b3a1a34a
2 changed files with 3 additions and 0 deletions

View File

@ -63,6 +63,7 @@ Other changes:
- Clipper: Added IncludeItemByIndex() helper to include a single item. (#6424, #3841) - Clipper: Added IncludeItemByIndex() helper to include a single item. (#6424, #3841)
- ImDrawData: Fixed an issue where TotalVtxCount/TotalIdxCount does not match the sum - ImDrawData: Fixed an issue where TotalVtxCount/TotalIdxCount does not match the sum
of individual ImDrawList's buffer sizes when a dimming/modal background is rendered. (#6716) of individual ImDrawList's buffer sizes when a dimming/modal background is rendered. (#6716)
- ImDrawList: Automatically calling ChannelsMerge() if not done after a split.
- ImDrawList: Fixed OOB access in _CalcCircleAutoSegmentCount when passing excessively - ImDrawList: Fixed OOB access in _CalcCircleAutoSegmentCount when passing excessively
large radius to AddCircle(). (#6657, #5317) [@EggsyCRO, @jdpatdiscord] large radius to AddCircle(). (#6657, #5317) [@EggsyCRO, @jdpatdiscord]
- IO: Exposed io.PlatformLocaleDecimalPoint to configure decimal point ('.' or ',') for - IO: Exposed io.PlatformLocaleDecimalPoint to configure decimal point ('.' or ',') for

View File

@ -4812,6 +4812,8 @@ static void AddWindowToDrawData(ImGuiWindow* window, int layer)
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
ImGuiViewportP* viewport = g.Viewports[0]; ImGuiViewportP* viewport = g.Viewports[0];
g.IO.MetricsRenderWindows++; g.IO.MetricsRenderWindows++;
if (window->DrawList->_Splitter._Count > 1)
window->DrawList->ChannelsMerge(); // Merge if user forgot to merge back. Also required in Docking branch for ImGuiWindowFlags_DockNodeHost windows.
ImGui::AddDrawListToDrawDataEx(&viewport->DrawDataP, viewport->DrawDataBuilder.Layers[layer], window->DrawList); ImGui::AddDrawListToDrawDataEx(&viewport->DrawDataP, viewport->DrawDataBuilder.Layers[layer], window->DrawList);
for (ImGuiWindow* child : window->DC.ChildWindows) for (ImGuiWindow* child : window->DC.ChildWindows)
if (IsWindowActiveAndVisible(child)) // Clipped children may have been marked not active if (IsWindowActiveAndVisible(child)) // Clipped children may have been marked not active