mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-22 11:57:00 +00:00
Debug: move debug assertion in post-clip code to reduce overhead. (#4796 and more).
Amend c80179921
This commit is contained in:
parent
1e1013085b
commit
8340a30d27
25
imgui.cpp
25
imgui.cpp
@ -9613,6 +9613,7 @@ void ImGuiStackSizes::CompareWithContextState(ImGuiContext* ctx)
|
|||||||
// Advance cursor given item size for layout.
|
// Advance cursor given item size for layout.
|
||||||
// Register minimum needed size so it can extend the bounding box used for auto-fit calculation.
|
// Register minimum needed size so it can extend the bounding box used for auto-fit calculation.
|
||||||
// See comments in ItemAdd() about how/why the size provided to ItemSize() vs ItemAdd() may often different.
|
// See comments in ItemAdd() about how/why the size provided to ItemSize() vs ItemAdd() may often different.
|
||||||
|
// THIS IS IN THE PERFORMANCE CRITICAL PATH.
|
||||||
void ImGui::ItemSize(const ImVec2& size, float text_baseline_y)
|
void ImGui::ItemSize(const ImVec2& size, float text_baseline_y)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -9652,6 +9653,7 @@ void ImGui::ItemSize(const ImVec2& size, float text_baseline_y)
|
|||||||
// Declare item bounding box for clipping and interaction.
|
// Declare item bounding box for clipping and interaction.
|
||||||
// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface
|
// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface
|
||||||
// declare their minimum size requirement to ItemSize() and provide a larger region to ItemAdd() which is used drawing/interaction.
|
// declare their minimum size requirement to ItemSize() and provide a larger region to ItemAdd() which is used drawing/interaction.
|
||||||
|
// THIS IS IN THE PERFORMANCE CRITICAL PATH (UNTIL THE CLIPPING TEST AND EARLY-RETURN)
|
||||||
bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGuiItemFlags extra_flags)
|
bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGuiItemFlags extra_flags)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -9666,11 +9668,11 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu
|
|||||||
g.LastItemData.StatusFlags = ImGuiItemStatusFlags_None;
|
g.LastItemData.StatusFlags = ImGuiItemStatusFlags_None;
|
||||||
// Note: we don't copy 'g.NextItemData.SelectionUserData' to an hypothetical g.LastItemData.SelectionUserData: since the former is not cleared.
|
// Note: we don't copy 'g.NextItemData.SelectionUserData' to an hypothetical g.LastItemData.SelectionUserData: since the former is not cleared.
|
||||||
|
|
||||||
// Directional navigation processing
|
|
||||||
if (id != 0)
|
if (id != 0)
|
||||||
{
|
{
|
||||||
KeepAliveID(id);
|
KeepAliveID(id);
|
||||||
|
|
||||||
|
// Directional navigation processing
|
||||||
// Runs prior to clipping early-out
|
// Runs prior to clipping early-out
|
||||||
// (a) So that NavInitRequest can be honored, for newly opened windows to select a default widget
|
// (a) So that NavInitRequest can be honored, for newly opened windows to select a default widget
|
||||||
// (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests
|
// (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests
|
||||||
@ -9689,12 +9691,9 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu
|
|||||||
if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened))
|
if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened))
|
||||||
NavProcessItem();
|
NavProcessItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
// [DEBUG] People keep stumbling on this problem and using "" as identifier in the root of a window instead of "##something".
|
|
||||||
// Empty identifier are valid and useful in a small amount of cases, but 99.9% of the time you want to use "##something".
|
|
||||||
// READ THE FAQ: https://dearimgui.com/faq
|
|
||||||
IM_ASSERT(id != window->ID && "Cannot have an empty ID at the root of a window. If you need an empty label, use ## and read the FAQ about how the ID Stack works!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Lightweight clear of SetNextItemXXX data.
|
||||||
g.NextItemData.Flags = ImGuiNextItemDataFlags_None;
|
g.NextItemData.Flags = ImGuiNextItemDataFlags_None;
|
||||||
g.NextItemData.ItemFlags = ImGuiItemFlags_None;
|
g.NextItemData.ItemFlags = ImGuiItemFlags_None;
|
||||||
|
|
||||||
@ -9704,7 +9703,7 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Clipping test
|
// Clipping test
|
||||||
// (FIXME: This is a modified copy of IsClippedEx() so we can reuse the is_rect_visible value)
|
// (this is a modified copy of IsClippedEx() so we can reuse the is_rect_visible value)
|
||||||
//const bool is_clipped = IsClippedEx(bb, id);
|
//const bool is_clipped = IsClippedEx(bb, id);
|
||||||
//if (is_clipped)
|
//if (is_clipped)
|
||||||
// return false;
|
// return false;
|
||||||
@ -9716,12 +9715,20 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu
|
|||||||
|
|
||||||
// [DEBUG]
|
// [DEBUG]
|
||||||
#ifndef IMGUI_DISABLE_DEBUG_TOOLS
|
#ifndef IMGUI_DISABLE_DEBUG_TOOLS
|
||||||
if (id != 0 && id == g.DebugLocateId)
|
if (id != 0)
|
||||||
|
{
|
||||||
|
if (id == g.DebugLocateId)
|
||||||
DebugLocateItemResolveWithLastItem();
|
DebugLocateItemResolveWithLastItem();
|
||||||
#endif
|
|
||||||
|
// [DEBUG] People keep stumbling on this problem and using "" as identifier in the root of a window instead of "##something".
|
||||||
|
// Empty identifier are valid and useful in a small amount of cases, but 99.9% of the time you want to use "##something".
|
||||||
|
// READ THE FAQ: https://dearimgui.com/faq
|
||||||
|
IM_ASSERT(id != window->ID && "Cannot have an empty ID at the root of a window. If you need an empty label, use ## and read the FAQ about how the ID Stack works!");
|
||||||
|
}
|
||||||
//if (g.IO.KeyAlt) window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255,255,0,120)); // [DEBUG]
|
//if (g.IO.KeyAlt) window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255,255,0,120)); // [DEBUG]
|
||||||
//if ((g.LastItemData.InFlags & ImGuiItemFlags_NoNav) == 0)
|
//if ((g.LastItemData.InFlags & ImGuiItemFlags_NoNav) == 0)
|
||||||
// window->DrawList->AddRect(g.LastItemData.NavRect.Min, g.LastItemData.NavRect.Max, IM_COL32(255,255,0,255)); // [DEBUG]
|
// window->DrawList->AddRect(g.LastItemData.NavRect.Min, g.LastItemData.NavRect.Max, IM_COL32(255,255,0,255)); // [DEBUG]
|
||||||
|
#endif
|
||||||
|
|
||||||
// We need to calculate this now to take account of the current clipping rectangle (as items like Selectable may change them)
|
// We need to calculate this now to take account of the current clipping rectangle (as items like Selectable may change them)
|
||||||
if (is_rect_visible)
|
if (is_rect_visible)
|
||||||
|
Loading…
Reference in New Issue
Block a user