mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 01:17:00 +00:00
ImDrawList: Internals: Added IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER setting.
This commit is contained in:
parent
b029182a73
commit
0850b46c88
@ -355,10 +355,10 @@ ImDrawListSharedData::ImDrawListSharedData()
|
|||||||
InitialFlags = ImDrawListFlags_None;
|
InitialFlags = ImDrawListFlags_None;
|
||||||
|
|
||||||
// Lookup tables
|
// Lookup tables
|
||||||
for (int i = 0; i < IM_ARRAYSIZE(CircleVtx12); i++)
|
for (int i = 0; i < IM_ARRAYSIZE(ArcFastVtx); i++)
|
||||||
{
|
{
|
||||||
const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(CircleVtx12);
|
const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(ArcFastVtx);
|
||||||
CircleVtx12[i] = ImVec2(ImCos(a), ImSin(a));
|
ArcFastVtx[i] = ImVec2(ImCos(a), ImSin(a));
|
||||||
}
|
}
|
||||||
memset(CircleSegmentCounts, 0, sizeof(CircleSegmentCounts)); // This will be set by SetCircleSegmentMaxError()
|
memset(CircleSegmentCounts, 0, sizeof(CircleSegmentCounts)); // This will be set by SetCircleSegmentMaxError()
|
||||||
}
|
}
|
||||||
@ -898,10 +898,18 @@ void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_
|
|||||||
_Path.push_back(center);
|
_Path.push_back(center);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For legacy reason the PathArcToFast() always takes angles where 2*PI is represented by 12,
|
||||||
|
// but it is possible to set IM_DRAWLIST_ARCFAST_TESSELATION_MULTIPLIER to a higher value. This should compile to a no-op otherwise.
|
||||||
|
#if IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER != 1
|
||||||
|
a_min_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER;
|
||||||
|
a_max_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER;
|
||||||
|
#endif
|
||||||
|
|
||||||
_Path.reserve(_Path.Size + (a_max_of_12 - a_min_of_12 + 1));
|
_Path.reserve(_Path.Size + (a_max_of_12 - a_min_of_12 + 1));
|
||||||
for (int a = a_min_of_12; a <= a_max_of_12; a++)
|
for (int a = a_min_of_12; a <= a_max_of_12; a++)
|
||||||
{
|
{
|
||||||
const ImVec2& c = _Data->CircleVtx12[a % IM_ARRAYSIZE(_Data->CircleVtx12)];
|
const ImVec2& c = _Data->ArcFastVtx[a % IM_ARRAYSIZE(_Data->ArcFastVtx)];
|
||||||
_Path.push_back(ImVec2(center.x + c.x * radius, center.y + c.y * radius));
|
_Path.push_back(ImVec2(center.x + c.x * radius, center.y + c.y * radius));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -863,11 +863,16 @@ struct ImGuiColumns
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper function to calculate a circle's segment count given its radius and a "maximum error" value.
|
// ImDrawList: Helper function to calculate a circle's segment count given its radius and a "maximum error" value.
|
||||||
#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN 12
|
#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN 12
|
||||||
#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX 512
|
#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX 512
|
||||||
#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(_RAD,_MAXERROR) ImClamp((int)((IM_PI * 2.0f) / ImAcos(((_RAD) - (_MAXERROR)) / (_RAD))), IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX)
|
#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(_RAD,_MAXERROR) ImClamp((int)((IM_PI * 2.0f) / ImAcos(((_RAD) - (_MAXERROR)) / (_RAD))), IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX)
|
||||||
|
|
||||||
|
// ImDrawList: You may set this to higher values (e.g. 2 or 3) to increase tessellation of fast rounded corners path.
|
||||||
|
#ifndef IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER
|
||||||
|
#define IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER 1
|
||||||
|
#endif
|
||||||
|
|
||||||
// Data shared between all ImDrawList instances
|
// Data shared between all ImDrawList instances
|
||||||
// You may want to create your own instance of this if you want to use ImDrawList completely without ImGui. In that case, watch out for future changes to this structure.
|
// You may want to create your own instance of this if you want to use ImDrawList completely without ImGui. In that case, watch out for future changes to this structure.
|
||||||
struct IMGUI_API ImDrawListSharedData
|
struct IMGUI_API ImDrawListSharedData
|
||||||
@ -881,7 +886,7 @@ struct IMGUI_API ImDrawListSharedData
|
|||||||
ImDrawListFlags InitialFlags; // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards)
|
ImDrawListFlags InitialFlags; // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards)
|
||||||
|
|
||||||
// [Internal] Lookup tables
|
// [Internal] Lookup tables
|
||||||
ImVec2 CircleVtx12[12]; // FIXME: Bake rounded corners fill/borders in atlas
|
ImVec2 ArcFastVtx[12 * IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER]; // FIXME: Bake rounded corners fill/borders in atlas
|
||||||
ImU8 CircleSegmentCounts[64]; // Precomputed segment count for given radius (array index + 1) before we calculate it dynamically (to avoid calculation overhead)
|
ImU8 CircleSegmentCounts[64]; // Precomputed segment count for given radius (array index + 1) before we calculate it dynamically (to avoid calculation overhead)
|
||||||
|
|
||||||
ImDrawListSharedData();
|
ImDrawListSharedData();
|
||||||
|
Loading…
Reference in New Issue
Block a user