Browse Source

Fixed cases where CTRL+Tab or Modal can occasionally lead to the creation of ImDrawCmd with zero triangles. (#4857, #5937)

Amend b0a6cd6
ocornut 2 years ago
parent
commit
9825f7fa87
2 changed files with 4 additions and 2 deletions
  1. 3 0
      docs/CHANGELOG.txt
  2. 1 2
      imgui_draw.cpp

+ 3 - 0
docs/CHANGELOG.txt

@@ -39,6 +39,9 @@ Breaking changes:
 
 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)
 - 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.

+ 1 - 2
imgui_draw.cpp

@@ -449,8 +449,7 @@ void ImDrawList::_PopUnusedDrawCmd()
 {
     if (CmdBuffer.Size == 0)
         return;
-    ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
-    if (curr_cmd->ElemCount == 0 && curr_cmd->UserCallback == NULL)
+    for (ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1]; curr_cmd->ElemCount == 0 && curr_cmd->UserCallback == NULL; curr_cmd--)
         CmdBuffer.pop_back();
 }