|
@@ -2006,7 +2006,15 @@ struct ImDrawVert
|
|
|
IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
|
|
|
#endif
|
|
|
|
|
|
-// For use by ImDrawListSplitter.
|
|
|
+// [Internal] For use by ImDrawList
|
|
|
+struct ImDrawCmdHeader
|
|
|
+{
|
|
|
+ ImVec4 ClipRect;
|
|
|
+ ImTextureID TextureId;
|
|
|
+ unsigned int VtxOffset;
|
|
|
+};
|
|
|
+
|
|
|
+// [Internal] For use by ImDrawListSplitter
|
|
|
struct ImDrawChannel
|
|
|
{
|
|
|
ImVector<ImDrawCmd> _CmdBuffer;
|
|
@@ -2021,7 +2029,7 @@ struct ImDrawListSplitter
|
|
|
int _Count; // Number of active channels (1+)
|
|
|
ImVector<ImDrawChannel> _Channels; // Draw channels (not resized down so _Count might be < Channels.Size)
|
|
|
|
|
|
- inline ImDrawListSplitter() { Clear(); }
|
|
|
+ inline ImDrawListSplitter() { memset(this, 0, sizeof(*this)); }
|
|
|
inline ~ImDrawListSplitter() { ClearFreeMemory(); }
|
|
|
inline void Clear() { _Current = 0; _Count = 1; } // Do not clear Channels[] so our allocations are reused next frame
|
|
|
IMGUI_API void ClearFreeMemory();
|
|
@@ -2072,19 +2080,19 @@ struct ImDrawList
|
|
|
ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive.
|
|
|
|
|
|
// [Internal, used while building lists]
|
|
|
+ unsigned int _VtxCurrentIdx; // [Internal] generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0.
|
|
|
const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context)
|
|
|
const char* _OwnerName; // Pointer to owner window's name for debugging
|
|
|
- unsigned int _VtxCurrentIdx; // [Internal] Generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0.
|
|
|
ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
|
|
|
ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
|
|
|
ImVector<ImVec4> _ClipRectStack; // [Internal]
|
|
|
ImVector<ImTextureID> _TextureIdStack; // [Internal]
|
|
|
ImVector<ImVec2> _Path; // [Internal] current path building
|
|
|
- ImDrawCmd _CmdHeader; // [Internal] Template of active commands. Fields should match those of CmdBuffer.back().
|
|
|
+ ImDrawCmdHeader _CmdHeader; // [Internal] template of active commands. Fields should match those of CmdBuffer.back().
|
|
|
ImDrawListSplitter _Splitter; // [Internal] for channels api (note: prefer using your own persistent instance of ImDrawListSplitter!)
|
|
|
|
|
|
// If you want to create ImDrawList instances, pass them ImGui::GetDrawListSharedData() or create and use your own ImDrawListSharedData (so you can use ImDrawList without ImGui)
|
|
|
- ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; Flags = ImDrawListFlags_None; _VtxCurrentIdx = 0; _VtxWritePtr = NULL; _IdxWritePtr = NULL; _OwnerName = NULL; }
|
|
|
+ ImDrawList(const ImDrawListSharedData* shared_data) { memset(this, 0, sizeof(*this)); _Data = shared_data; }
|
|
|
|
|
|
~ImDrawList() { _ClearFreeMemory(); }
|
|
|
IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling)
|