Browse Source

Tables, ImDrawListSplitter: Fixed erroneously stripping trailing ImDrawList::AddCallback().(#4843, #4844)

Jonathan Hoffstadt 3 years ago
parent
commit
83d22f4e48
3 changed files with 4 additions and 4 deletions
  1. 2 0
      docs/CHANGELOG.txt
  2. 1 3
      imgui_draw.cpp
  3. 1 1
      imgui_tables.cpp

+ 2 - 0
docs/CHANGELOG.txt

@@ -35,6 +35,8 @@ HOW TO UPDATE?
  VERSION 1.87 WIP (In Progress)
  VERSION 1.87 WIP (In Progress)
 -----------------------------------------------------------------------
 -----------------------------------------------------------------------
 
 
+- Tables, ImDrawListSplitter: Fixed erroneously stripping trailing ImDrawList::AddCallback() when submitted in
+  last column or last channel and when there are no other drawing operation. (#4843, #4844) [@hoffstadt]
 - Backends: OpenGL3: Fixed a buffer overflow in imgui_impl_opengl3_loader.h init (added in 1.86). (#4468, #4830) [@dymk]
 - Backends: OpenGL3: Fixed a buffer overflow in imgui_impl_opengl3_loader.h init (added in 1.86). (#4468, #4830) [@dymk]
   It would generally not have noticeable side-effect at runtime but would be detected by runtime checkers.
   It would generally not have noticeable side-effect at runtime but would be detected by runtime checkers.
 - Backends: Metal: Added Apple Metal C++ API support. (#4824, #4746) [@luigifcruz]
 - Backends: Metal: Added Apple Metal C++ API support. (#4824, #4746) [@luigifcruz]

+ 1 - 3
imgui_draw.cpp

@@ -1733,9 +1733,7 @@ void ImDrawListSplitter::Merge(ImDrawList* draw_list)
     for (int i = 1; i < _Count; i++)
     for (int i = 1; i < _Count; i++)
     {
     {
         ImDrawChannel& ch = _Channels[i];
         ImDrawChannel& ch = _Channels[i];
-
-        // Equivalent of PopUnusedDrawCmd() for this channel's cmdbuffer and except we don't need to test for UserCallback.
-        if (ch._CmdBuffer.Size > 0 && ch._CmdBuffer.back().ElemCount == 0)
+        if (ch._CmdBuffer.Size > 0 && ch._CmdBuffer.back().ElemCount == 0 && ch._CmdBuffer.back().UserCallback == NULL) // Equivalent of PopUnusedDrawCmd()
             ch._CmdBuffer.pop_back();
             ch._CmdBuffer.pop_back();
 
 
         if (ch._CmdBuffer.Size > 0 && last_cmd != NULL)
         if (ch._CmdBuffer.Size > 0 && last_cmd != NULL)

+ 1 - 1
imgui_tables.cpp

@@ -2353,7 +2353,7 @@ void ImGui::TableMergeDrawChannels(ImGuiTable* table)
 
 
             // Don't attempt to merge if there are multiple draw calls within the column
             // Don't attempt to merge if there are multiple draw calls within the column
             ImDrawChannel* src_channel = &splitter->_Channels[channel_no];
             ImDrawChannel* src_channel = &splitter->_Channels[channel_no];
-            if (src_channel->_CmdBuffer.Size > 0 && src_channel->_CmdBuffer.back().ElemCount == 0)
+            if (src_channel->_CmdBuffer.Size > 0 && src_channel->_CmdBuffer.back().ElemCount == 0 && src_channel->_CmdBuffer.back().UserCallback != NULL) // Equivalent of PopUnusedDrawCmd()
                 src_channel->_CmdBuffer.pop_back();
                 src_channel->_CmdBuffer.pop_back();
             if (src_channel->_CmdBuffer.Size != 1)
             if (src_channel->_CmdBuffer.Size != 1)
                 continue;
                 continue;