|
@@ -376,12 +376,13 @@ void ImDrawListSharedData::SetCircleSegmentMaxError(float max_error)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void ImDrawList::Clear()
|
|
|
+// Initialize before use in a new frame. We always have a command ready in the buffer.
|
|
|
+void ImDrawList::ResetForNewFrame()
|
|
|
{
|
|
|
CmdBuffer.resize(0);
|
|
|
IdxBuffer.resize(0);
|
|
|
VtxBuffer.resize(0);
|
|
|
- Flags = _Data ? _Data->InitialFlags : ImDrawListFlags_None;
|
|
|
+ Flags = _Data->InitialFlags;
|
|
|
_VtxCurrentOffset = 0;
|
|
|
_VtxCurrentIdx = 0;
|
|
|
_VtxWritePtr = NULL;
|
|
@@ -390,6 +391,7 @@ void ImDrawList::Clear()
|
|
|
_TextureIdStack.resize(0);
|
|
|
_Path.resize(0);
|
|
|
_Splitter.Clear();
|
|
|
+ CmdBuffer.push_back(ImDrawCmd());
|
|
|
}
|
|
|
|
|
|
void ImDrawList::ClearFreeMemory()
|
|
@@ -397,6 +399,8 @@ void ImDrawList::ClearFreeMemory()
|
|
|
CmdBuffer.clear();
|
|
|
IdxBuffer.clear();
|
|
|
VtxBuffer.clear();
|
|
|
+ Flags = ImDrawListFlags_None;
|
|
|
+ _VtxCurrentOffset = 0;
|
|
|
_VtxCurrentIdx = 0;
|
|
|
_VtxWritePtr = NULL;
|
|
|
_IdxWritePtr = NULL;
|
|
@@ -434,8 +438,8 @@ void ImDrawList::AddDrawCmd()
|
|
|
|
|
|
void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data)
|
|
|
{
|
|
|
- ImDrawCmd* curr_cmd = CmdBuffer.Size > 0 ? &CmdBuffer.Data[CmdBuffer.Size - 1] : NULL;
|
|
|
- if (!curr_cmd || curr_cmd->ElemCount != 0 || curr_cmd->UserCallback != NULL)
|
|
|
+ ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
|
|
|
+ if (curr_cmd->ElemCount != 0 || curr_cmd->UserCallback != NULL)
|
|
|
{
|
|
|
AddDrawCmd();
|
|
|
curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
|
|
@@ -452,8 +456,8 @@ void ImDrawList::UpdateClipRect()
|
|
|
{
|
|
|
// If current command is used with different settings we need to add a new command
|
|
|
const ImVec4 curr_clip_rect = GetCurrentClipRect();
|
|
|
- ImDrawCmd* curr_cmd = CmdBuffer.Size > 0 ? &CmdBuffer.Data[CmdBuffer.Size - 1] : NULL;
|
|
|
- if (!curr_cmd || (curr_cmd->ElemCount != 0 && memcmp(&curr_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) != 0) || curr_cmd->UserCallback != NULL)
|
|
|
+ ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
|
|
|
+ if ((curr_cmd->ElemCount != 0 && memcmp(&curr_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) != 0) || curr_cmd->UserCallback != NULL)
|
|
|
{
|
|
|
AddDrawCmd();
|
|
|
return;
|
|
@@ -477,7 +481,7 @@ void ImDrawList::UpdateTextureID()
|
|
|
{
|
|
|
// If current command is used with different settings we need to add a new command
|
|
|
const ImTextureID curr_texture_id = GetCurrentTextureId();
|
|
|
- ImDrawCmd* curr_cmd = CmdBuffer.Size > 0 ? &CmdBuffer.Data[CmdBuffer.Size - 1] : NULL;
|
|
|
+ ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
|
|
|
if (!curr_cmd || (curr_cmd->ElemCount != 0 && curr_cmd->TextureId != curr_texture_id) || curr_cmd->UserCallback != NULL)
|
|
|
{
|
|
|
AddDrawCmd();
|