Skip to content

Commit 6b7fe16

Browse files
committed
Added workaround for bug that appears to put sentinels at unexpected locations in the draw list, causing crashes
1 parent da5bd51 commit 6b7fe16

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

imgui_canvas.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,20 @@ void ImGuiEx::Canvas::LeaveLocalSpace()
561561
m_DrawList->CmdBuffer.erase(m_DrawList->CmdBuffer.Data + m_DrawListCommadBufferSize);
562562
else if (m_DrawList->CmdBuffer.size() >= m_DrawListCommadBufferSize && m_DrawList->CmdBuffer[m_DrawListCommadBufferSize - 1].UserCallback == ImDrawCallback_ImCanvas)
563563
m_DrawList->CmdBuffer.erase(m_DrawList->CmdBuffer.Data + m_DrawListCommadBufferSize - 1);
564+
565+
//DEBUG: Search the *entire* draw list for the sentinel command
566+
for(int i=0; i<m_DrawList->CmdBuffer.size(); i++)
567+
{
568+
if(m_DrawList->CmdBuffer[i].UserCallback == ImDrawCallback_ImCanvas)
569+
{
570+
/*fprintf(stderr, "found and removed sentinel at offset %d, expected %d or %d\n",
571+
i,
572+
m_DrawListCommadBufferSize,
573+
m_DrawListCommadBufferSize-1);*/
574+
575+
m_DrawList->CmdBuffer.erase(m_DrawList->CmdBuffer.Data + i);
576+
}
577+
}
564578
}
565579

566580
auto& fringeScale = ImFringeScaleRef(m_DrawList);

0 commit comments

Comments
 (0)