From 844e0ae6884e6481b77fcce3339ac0fbaf659cdf Mon Sep 17 00:00:00 2001 From: ocornut Date: Thu, 1 Dec 2022 20:18:32 +0100 Subject: [PATCH] Fixes/amend 9825f7f + amend Changelog (#4857, #5937) --- docs/CHANGELOG.txt | 1 + imgui_draw.cpp | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index ac6a17261..4817c9ba0 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -42,6 +42,7 @@ Other changes: - Fixed cases where CTRL+Tab or Modal can occasionally lead to the creation of ImDrawCmd with zero triangles, which would makes the render loop of some backends assert (e.g. Metal with debugging, Allegro). (#4857, #5937) +- Tables, Columns: Fixed cases where empty columns may lead to empty ImDrawCmd. (#4857, #5937) - Inputs, Scrolling: better selection of scrolling window when hovering nested windows and when backend/OS is emitting dual-axis wheeling inputs (typically touch pads on macOS). We now select a primary axis based on recent events, and select a target window based on it. diff --git a/imgui_draw.cpp b/imgui_draw.cpp index 349891dc5..7cd9c7c10 100644 --- a/imgui_draw.cpp +++ b/imgui_draw.cpp @@ -447,10 +447,13 @@ void ImDrawList::AddDrawCmd() // Note that this leaves the ImDrawList in a state unfit for further commands, as most code assume that CmdBuffer.Size > 0 && CmdBuffer.back().UserCallback == NULL void ImDrawList::_PopUnusedDrawCmd() { - if (CmdBuffer.Size == 0) - return; - for (ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1]; curr_cmd->ElemCount == 0 && curr_cmd->UserCallback == NULL; curr_cmd--) + while (CmdBuffer.Size > 0) + { + ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1]; + if (curr_cmd->ElemCount != 0 || curr_cmd->UserCallback != NULL) + return;// break; CmdBuffer.pop_back(); + } } void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data)