diff --git a/imgui.cpp b/imgui.cpp index c9f203ff3..b7f7b9575 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -5795,7 +5795,7 @@ static void SetupDrawListSharedData() g.DrawListSharedData.InitialDrawFlags |= ImDrawFlags_UseTexForStrokeLegacy; #endif if (!(g.IO.Fonts->Flags & ImFontAtlasFlags_NoBakedRoundCorners)) - g.DrawListSharedData.InitialDrawFlags |= ImDrawFlags_UseTexForRoundCorners; + g.DrawListSharedData.InitialDrawFlags |= ImDrawFlags_UseTexForRoundCorners | ImDrawFlags_AllowTexForRoundCorners_; if (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset) g.DrawListSharedData.InitialDrawFlags |= ImDrawFlags_UseVtxOffset; } diff --git a/imgui.h b/imgui.h index cbb48a17a..ef702a8af 100644 --- a/imgui.h +++ b/imgui.h @@ -3478,10 +3478,12 @@ enum ImDrawFlags_ ImDrawFlags_UseTexForRoundCorners = 1 << 21, // -- OK(1) // Enable using textures instead of strokes to draw rounded corners/circles where possible (faster). Used by default unless 'ImFontAtlasFlags_NoBakedRoundCorners' is enabled in the font atlas. ImDrawFlags_UseTexForStrokeLegacy = 1 << 22, // -- OK(1) // Enable anti-aliased lines/borders using textures when using legacy strokes. Require backend to render with bilinear filtering (NOT point/nearest filtering). Used by default unless 'ImFontAtlasFlags_NoBakedLines' is set in the font atlas. ImDrawFlags_UseVtxOffset = 1 << 23, // -- OK(1) // Can emit 'VtxOffset > 0' to allow large meshes with 16-bit ImDrawIdx. Used by default when 'ImGuiBackendFlags_RendererHasVtxOffset' is enabled by the backend. + ImDrawFlags_AllowTexForRoundCorners_= 1 << 24, // -- OK(1) // [Internal] // [Internal] ImDrawFlags_RoundCornersMask_ = ImDrawFlags_RoundCornersAll | ImDrawFlags_RoundCornersNone, // [Internal] - ImDrawFlags_AllowedInScope_ = ImDrawFlags_AAFill | ImDrawFlags_AALines | ImDrawFlags_AALineEnds | ImDrawFlags_StrokeLegacy | ImDrawFlags_TextNoPixelSnap | ImDrawFlags_UseTexForRoundCorners | ImDrawFlags_UseTexForStrokeLegacy | ImDrawFlags_UseVtxOffset | ImDrawFlags_RoundCornersMask_, // [Internal] Values allowed in PushDrawFlag() scope. + ImDrawFlags_AllowInPushScope_ = ImDrawFlags_AAFill | ImDrawFlags_AALines | ImDrawFlags_AALineEnds | ImDrawFlags_StrokeLegacy | ImDrawFlags_TextNoPixelSnap | ImDrawFlags_UseTexForRoundCorners | ImDrawFlags_UseTexForStrokeLegacy | ImDrawFlags_UseVtxOffset | ImDrawFlags_RoundCornersMask_, // [Internal] Values allowed in PushDrawFlag() scope. + ImDrawFlags_AllowInFrameScope_ = ImDrawFlags_AllowInPushScope_ | ImDrawFlags_AllowTexForRoundCorners_, ImDrawFlags_StrokeMask_ = 0x07 << 17, // [Internal] ImDrawFlags_InvalidMask_ = ~0x7FFFFFF0, // [Internal] == 0x8000000F. Reserved to detect misuses. }; diff --git a/imgui_demo.cpp b/imgui_demo.cpp index 2b4eb408e..9be3d43be 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -10476,7 +10476,7 @@ static void ShowExampleAppCustomRendering(bool* p_open) //ImGui::CheckboxFlags("UseTexForRoundCorners", &prim_other_flags, ImDrawFlags_UseTexForRoundCorners); ImGui::SameLine(); //ImGui::CheckboxFlags("UseTexForStrokeLegacy", &prim_other_flags, ImDrawFlags_UseTexForStrokeLegacy); - static ImDrawFlags scope_flags = draw_list->Flags; // First init copy current state. + static ImDrawFlags scope_flags = draw_list->Flags & ImDrawFlags_AllowInPushScope_; // First init copy current state. ImGui::SeparatorText("Current ImDrawList flags (e.g. PushDrawFlag function)"); ImGui::PushID("ScopeFlags"); ImGui::CheckboxFlags("AAFill", &scope_flags, ImDrawFlags_AAFill); ImGui::SameLine(); @@ -10488,7 +10488,7 @@ static void ShowExampleAppCustomRendering(bool* p_open) ImGui::PopID(); ImGui::Spacing(); - draw_list->PushDrawFlag(ImDrawFlags_AllowedInScope_, false); // Reset all existing (very unusual: done for this demo) + draw_list->PushDrawFlag(ImDrawFlags_AllowInPushScope_, false); // Reset all existing (very unusual: done for this demo) draw_list->PushDrawFlag(scope_flags, true); const ImDrawFlags flags = prim_stroke_flags | prim_other_flags; const ImDrawFlags fill_flags = flags & (ImDrawFlags_AAFill | ImDrawFlags_UseTexForRoundCorners); diff --git a/imgui_draw.cpp b/imgui_draw.cpp index 9907c1640..385bdae05 100644 --- a/imgui_draw.cpp +++ b/imgui_draw.cpp @@ -468,7 +468,7 @@ void ImDrawList::_ResetForNewFrame() IdxBuffer.resize(0); VtxBuffer.resize(0); Flags = _Data->InitialDrawFlags; - IM_ASSERT((Flags & ~ImDrawFlags_AllowedInScope_) == 0); + IM_ASSERT((Flags & ~ImDrawFlags_AllowInFrameScope_) == 0); memset(&_CmdHeader, 0, sizeof(_CmdHeader)); _VtxCurrentIdx = 0; _VtxWritePtr = NULL; @@ -722,7 +722,7 @@ void ImDrawList::PopTexture() // IMPORTANT: currently limited to 3 deep void ImDrawList::PushDrawFlag(ImDrawFlags flags, bool enabled) { - IM_ASSERT((flags & ~ImDrawFlags_AllowedInScope_) == 0); + IM_ASSERT((flags & ~ImDrawFlags_AllowInPushScope_) == 0); IM_ASSERT((flags & ImDrawFlags_StrokeMask_) == 0 || (flags & ImDrawFlags_StrokeMask_) == ImDrawFlags_StrokeLegacy); _DrawFlagsStack.push_back(Flags); if (enabled) @@ -2429,7 +2429,7 @@ void ImDrawList::AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, fl return; } // Textured corners are baked with AA, do not use them if no-AA is requested. - const bool allow_tex_corners = (flags & (ImDrawFlags_AALines | ImDrawFlags_UseTexForRoundCorners)) == (ImDrawFlags_AALines | ImDrawFlags_UseTexForRoundCorners); + const bool allow_tex_corners = (flags & (ImDrawFlags_AALines | ImDrawFlags_UseTexForRoundCorners | ImDrawFlags_AllowTexForRoundCorners_)) == (ImDrawFlags_AALines | ImDrawFlags_UseTexForRoundCorners | ImDrawFlags_AllowTexForRoundCorners_); if (allow_tex_corners && s_thickness < IM_DRAWLIST_TEX_CORNERS_THICKNESS_MAX && s_rounding <= IM_DRAWLIST_TEX_CORNERS_ROUNDING_MAX) { // Pixel aligned rect with round corners rendered using baked textures. @@ -2577,10 +2577,10 @@ void ImDrawList::AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 c return; } // Textured corners are baked with AA, do not use them if no-AA is requested. - const bool allow_tex_corners = (flags & (ImDrawFlags_AAFill | ImDrawFlags_UseTexForRoundCorners)) == (ImDrawFlags_AAFill | ImDrawFlags_UseTexForRoundCorners); + const bool allow_tex_corners = (flags & (ImDrawFlags_AAFill | ImDrawFlags_UseTexForRoundCorners | ImDrawFlags_AllowTexForRoundCorners_)) == (ImDrawFlags_AAFill | ImDrawFlags_UseTexForRoundCorners | ImDrawFlags_AllowTexForRoundCorners_); if (allow_tex_corners && s_rounding <= IM_DRAWLIST_TEX_CORNERS_ROUNDING_MAX) { - IM_ASSERT_PARANOID(!(_Data->Font->OwnerAtlas->Flags & ImFontAtlasFlags_NoBakedRoundCorners)); + IM_ASSERT_PARANOID(!(_Data->Font->OwnerAtlas->Flags & ImFontAtlasFlags_NoBakedRoundCorners)); // This is matching the baking calculations. The rounding clamping above makes sure that there's enough space for the extra pixel. const int size = s_rounding + 1; const int idx = (s_rounding - 1);