mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-25 21:17:01 +00:00
ImDrawList, ImDrawListSplitter, Columns: Fixed an issue where changing channels with different TextureId, VtxOffset would incorrectly apply new settings to draw channels. (#3129, #3163)
This commit is contained in:
parent
3bef743df4
commit
84862ec78e
@ -59,6 +59,9 @@ Other Changes:
|
|||||||
- ImDrawList: Fixed an issue where draw command merging or primitive unreserve while crossing the
|
- ImDrawList: Fixed an issue where draw command merging or primitive unreserve while crossing the
|
||||||
VtxOffset boundary would lead to draw commands with wrong VtxOffset. (#3129, #3163, #3232, #2591)
|
VtxOffset boundary would lead to draw commands with wrong VtxOffset. (#3129, #3163, #3232, #2591)
|
||||||
[@thedmd, @Shironekoben, @sergeyn, @ocornut]
|
[@thedmd, @Shironekoben, @sergeyn, @ocornut]
|
||||||
|
- ImDrawList, ImDrawListSplitter, Columns: Fixed an issue where changing channels with different
|
||||||
|
TextureId, VtxOffset would incorrectly apply new settings to draw channels. (#3129, #3163)
|
||||||
|
[@ocornut, @thedmd, @Shironekoben]
|
||||||
- ImDrawList, ImDrawListSplitter, Columns: Fixed an issue where starting a split when current
|
- ImDrawList, ImDrawListSplitter, Columns: Fixed an issue where starting a split when current
|
||||||
VtxOffset was not zero would lead to draw commands with wrong VtxOffset. (#2591)
|
VtxOffset was not zero would lead to draw commands with wrong VtxOffset. (#2591)
|
||||||
- ImDrawList, ImDrawListSplitter, Columns: Fixed an issue where starting a split right after
|
- ImDrawList, ImDrawListSplitter, Columns: Fixed an issue where starting a split right after
|
||||||
|
@ -1435,8 +1435,13 @@ void ImDrawListSplitter::Merge(ImDrawList* draw_list)
|
|||||||
if (draw_list->CmdBuffer.Size == 0 || draw_list->CmdBuffer.back().UserCallback != NULL)
|
if (draw_list->CmdBuffer.Size == 0 || draw_list->CmdBuffer.back().UserCallback != NULL)
|
||||||
draw_list->AddDrawCmd();
|
draw_list->AddDrawCmd();
|
||||||
|
|
||||||
draw_list->_OnChangedClipRect(); // We call this instead of AddDrawCmd(), so that empty channels won't produce an extra draw call.
|
// If current command is used with different settings we need to add a new command
|
||||||
draw_list->_OnChangedTextureID();
|
ImDrawCmd* curr_cmd = &draw_list->CmdBuffer.Data[draw_list->CmdBuffer.Size - 1];
|
||||||
|
if (curr_cmd->ElemCount == 0)
|
||||||
|
ImDrawCmd_HeaderCopy(curr_cmd, &draw_list->_CmdHeader); // Copy ClipRect, TextureId, VtxOffset
|
||||||
|
else if (ImDrawCmd_HeaderCompare(curr_cmd, &draw_list->_CmdHeader) != 0)
|
||||||
|
draw_list->AddDrawCmd();
|
||||||
|
|
||||||
_Count = 1;
|
_Count = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1453,6 +1458,13 @@ void ImDrawListSplitter::SetCurrentChannel(ImDrawList* draw_list, int idx)
|
|||||||
memcpy(&draw_list->CmdBuffer, &_Channels.Data[idx]._CmdBuffer, sizeof(draw_list->CmdBuffer));
|
memcpy(&draw_list->CmdBuffer, &_Channels.Data[idx]._CmdBuffer, sizeof(draw_list->CmdBuffer));
|
||||||
memcpy(&draw_list->IdxBuffer, &_Channels.Data[idx]._IdxBuffer, sizeof(draw_list->IdxBuffer));
|
memcpy(&draw_list->IdxBuffer, &_Channels.Data[idx]._IdxBuffer, sizeof(draw_list->IdxBuffer));
|
||||||
draw_list->_IdxWritePtr = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size;
|
draw_list->_IdxWritePtr = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size;
|
||||||
|
|
||||||
|
// If current command is used with different settings we need to add a new command
|
||||||
|
ImDrawCmd* curr_cmd = &draw_list->CmdBuffer.Data[draw_list->CmdBuffer.Size - 1];
|
||||||
|
if (curr_cmd->ElemCount == 0)
|
||||||
|
ImDrawCmd_HeaderCopy(curr_cmd, &draw_list->_CmdHeader); // Copy ClipRect, TextureId, VtxOffset
|
||||||
|
else if (ImDrawCmd_HeaderCompare(curr_cmd, &draw_list->_CmdHeader) != 0)
|
||||||
|
draw_list->AddDrawCmd();
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user