@ -516,10 +516,13 @@ void ImDrawList::PopTextureID()
UpdateTextureID ( ) ;
}
// NB: this can be called with negative count for removing primitives (as long as the result does not underflow)
// Reserve space for a number of vertices and indices.
// You must finish filling your reserved data before calling PrimReserve() again, as it may reallocate or
// submit the intermediate results. PrimUnreserve() can be used to release unused allocations.
void ImDrawList : : PrimReserve ( int idx_count , int vtx_count )
{
// Large mesh support (when enabled)
IM_ASSERT_PARANOID ( idx_count > = 0 & & vtx_count > = 0 ) ;
if ( sizeof ( ImDrawIdx ) = = 2 & & ( _VtxCurrentIdx + vtx_count > = ( 1 < < 16 ) ) & & ( Flags & ImDrawListFlags_AllowVtxOffset ) )
{
_VtxCurrentOffset = VtxBuffer . Size ;
@ -527,7 +530,7 @@ void ImDrawList::PrimReserve(int idx_count, int vtx_count)
AddDrawCmd ( ) ;
}
ImDrawCmd & draw_cmd = CmdBuffer . Data [ CmdBuffer . Size - 1 ] ;
ImDrawCmd & draw_cmd = CmdBuffer . Data [ CmdBuffer . Size - 1 ] ;
draw_cmd . ElemCount + = idx_count ;
int vtx_buffer_old_size = VtxBuffer . Size ;
@ -539,6 +542,17 @@ void ImDrawList::PrimReserve(int idx_count, int vtx_count)
_IdxWritePtr = IdxBuffer . Data + idx_buffer_old_size ;
}
// Release the a number of reserved vertices/indices from the end of the last reservation made with PrimReserve().
void ImDrawList : : PrimUnreserve ( int idx_count , int vtx_count )
{
IM_ASSERT_PARANOID ( idx_count > = 0 & & vtx_count > = 0 ) ;
ImDrawCmd & draw_cmd = CmdBuffer . Data [ CmdBuffer . Size - 1 ] ;
draw_cmd . ElemCount - = idx_count ;
VtxBuffer . shrink ( VtxBuffer . Size - vtx_count ) ;
IdxBuffer . shrink ( IdxBuffer . Size - idx_count ) ;
}
// Fully unrolled with inline call to keep our debug builds decently fast.
void ImDrawList : : PrimRect ( const ImVec2 & a , const ImVec2 & c , ImU32 col )
{