@@ -421,6 +421,15 @@ void ImGuiEx::Canvas::EnterLocalSpace()
421421 auto clipped_clip_rect = m_DrawList->_ClipRectStack .back ();
422422 ImGui::PopClipRect ();
423423
424+ # if IMGUI_EX_CANVAS_DEFERED()
425+ m_Ranges.resize (m_Ranges.Size + 1 );
426+ m_CurrentRange = &m_Ranges.back ();
427+ m_CurrentRange->BeginComandIndex = ImMax (m_DrawList->CmdBuffer .Size , 0 );
428+ m_CurrentRange->BeginVertexIndex = m_DrawList->_VtxCurrentIdx + ImVtxOffsetRef (m_DrawList);
429+ # endif
430+ m_DrawListCommadBufferSize = ImMax (m_DrawList->CmdBuffer .Size , 0 );
431+ m_DrawListStartVertexIndex = m_DrawList->_VtxCurrentIdx + ImVtxOffsetRef (m_DrawList);
432+
424433 // Make sure we do not share draw command with anyone. We don't want to mess
425434 // with someones clip rectangle.
426435
@@ -437,15 +446,6 @@ void ImGuiEx::Canvas::EnterLocalSpace()
437446 if ((!m_DrawList->CmdBuffer .empty () && m_DrawList->CmdBuffer .back ().ElemCount > 0 ) || m_DrawList->_Splitter ._Count > 1 )
438447 m_DrawList->AddCallback (&ImCanvasDetails::SentinelDrawCallback, nullptr );
439448
440- # if IMGUI_EX_CANVAS_DEFERED()
441- m_Ranges.resize (m_Ranges.Size + 1 );
442- m_CurrentRange = &m_Ranges.back ();
443- m_CurrentRange->BeginComandIndex = ImMax (m_DrawList->CmdBuffer .Size - 1 , 0 );
444- m_CurrentRange->BeginVertexIndex = m_DrawList->_VtxCurrentIdx + ImVtxOffsetRef (m_DrawList);
445- # endif
446- m_DrawListCommadBufferSize = ImMax (m_DrawList->CmdBuffer .Size - 1 , 0 );
447- m_DrawListStartVertexIndex = m_DrawList->_VtxCurrentIdx + ImVtxOffsetRef (m_DrawList);
448-
449449# if defined(IMGUI_HAS_VIEWPORT)
450450 auto window = ImGui::GetCurrentWindow ();
451451 window->Pos = ImVec2 (0 .0f , 0 .0f );
@@ -554,8 +554,13 @@ void ImGuiEx::Canvas::LeaveLocalSpace()
554554 }
555555
556556 // Remove sentinel draw command if present
557- if (m_DrawListCommadBufferSize > 0 && m_DrawList->CmdBuffer .size () >= m_DrawListCommadBufferSize && m_DrawList->CmdBuffer [m_DrawListCommadBufferSize - 1 ].UserCallback == &ImCanvasDetails::SentinelDrawCallback)
558- m_DrawList->CmdBuffer .erase (m_DrawList->CmdBuffer .Data + m_DrawListCommadBufferSize - 1 );
557+ if (m_DrawListCommadBufferSize > 0 )
558+ {
559+ if (m_DrawList->CmdBuffer .size () > m_DrawListCommadBufferSize && m_DrawList->CmdBuffer [m_DrawListCommadBufferSize].UserCallback == &ImCanvasDetails::SentinelDrawCallback)
560+ m_DrawList->CmdBuffer .erase (m_DrawList->CmdBuffer .Data + m_DrawListCommadBufferSize);
561+ else if (m_DrawList->CmdBuffer .size () >= m_DrawListCommadBufferSize && m_DrawList->CmdBuffer [m_DrawListCommadBufferSize - 1 ].UserCallback == &ImCanvasDetails::SentinelDrawCallback)
562+ m_DrawList->CmdBuffer .erase (m_DrawList->CmdBuffer .Data + m_DrawListCommadBufferSize - 1 );
563+ }
559564
560565 auto & fringeScale = ImFringeScaleRef (m_DrawList);
561566 fringeScale = m_LastFringeScale;
0 commit comments