Skip to content

Commit

Permalink
ImDrawList: Fix broken channel splitting (broken by d1e8b69) (#2591)
Browse files Browse the repository at this point in the history
  • Loading branch information
ocornut committed May 30, 2019
1 parent 546b728 commit 42c98c5
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion imgui_draw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -568,18 +568,27 @@ void ImDrawList::ChannelsMerge()
if (CmdBuffer.Size && CmdBuffer.back().ElemCount == 0)
CmdBuffer.pop_back();

int new_cmd_buffer_count = 0, new_idx_buffer_count = 0;
// Calculate our final buffer sizes. Also fix the incorrect IdxOffset values in each command.
int new_cmd_buffer_count = 0;
int new_idx_buffer_count = 0;
int idx_offset = CmdBuffer.back().IdxOffset + CmdBuffer.back().ElemCount;
for (int i = 1; i < _ChannelsCount; i++)
{
ImDrawChannel& ch = _Channels[i];
if (ch.CmdBuffer.Size && ch.CmdBuffer.back().ElemCount == 0)
ch.CmdBuffer.pop_back();
new_cmd_buffer_count += ch.CmdBuffer.Size;
new_idx_buffer_count += ch.IdxBuffer.Size;
for (int cmd_n = 0; cmd_n < ch.CmdBuffer.Size; cmd_n++)
{
ch.CmdBuffer.Data[cmd_n].IdxOffset = idx_offset;
idx_offset += ch.CmdBuffer.Data[cmd_n].ElemCount;
}
}
CmdBuffer.resize(CmdBuffer.Size + new_cmd_buffer_count);
IdxBuffer.resize(IdxBuffer.Size + new_idx_buffer_count);

// Flatten our N channels at the end of the first one.
ImDrawCmd* cmd_write = CmdBuffer.Data + CmdBuffer.Size - new_cmd_buffer_count;
_IdxWritePtr = IdxBuffer.Data + IdxBuffer.Size - new_idx_buffer_count;
for (int i = 1; i < _ChannelsCount; i++)
Expand Down

0 comments on commit 42c98c5

Please sign in to comment.