Commit Graph

1437 Commits

Author SHA1 Message Date
ocornut
3741affa6d Docs: reworked Changelog, comments. 2026-08-06 18:12:11 +02:00
ocornut
c5bc3ba9fe DrawList: rework _SelectFringeTexture() for use by third-party extensions + rename to _SelectLineTexture(). 2026-08-06 18:12:10 +02:00
ocornut
56a3017210 DrawList: fixed ImFontAtlasBuildUpdateTexDataCorners() packing vs render to match. 2026-08-06 18:12:10 +02:00
ocornut
bc2ce848a1 DrawList: amend PushDrawFlag() to report reaching capacity. 2026-08-06 18:12:10 +02:00
ocornut
63a36bfcc8 DrawList: simplify ImFontAtlasBuildUpdateTexDataCorners() by merging fill/strokes loops. 2026-08-06 18:12:10 +02:00
Mikko Mononen
65f176ef74 DrawList: fixed PathArcTo to not emit small segments.
- Changed PathArcTo to select start/end sample in quatized multiples of arc fast sample count
- This is done in order to avoid small segments at the start and end of the path, which causes issues with line AA ends
- Renamed CalcArcStepAndCount to CalcCornerArcStepAndCount to make it more clear that it returns the values for 90 degree arc
2026-08-06 18:12:09 +02:00
Mikko Mononen
d75d11cd2b DrawList: fixed too many detailed line textures being created.
Fixed issue where were creating detailed line textures up to detailed witdh + 1
Changed IM_DRAWLIST_TEX_LINES_DETAILED_WIDTH_MAX to IM_DRAWLIST_TEX_LINES_DETAILED_WIDTH_COUNT which no accounts for all the detailed line textures.
2026-08-06 18:12:09 +02:00
Mikko Mononen
30f70ac19c DrawList: fixed rendering issues on small and degenerate shapes.
The "does stroke cover the whole shape" used to be overly pessimistic to stroking artifacts. This was due to the fringe, where the geometry would mess up before visually closing the shape.
Fixed the issue by adding max inner offest for the AddPolyline(), which limits the inner offset and also adjusts the texture coords.
Second part of the fix was to calculate the pass the max inner offset from the common shapes (circle, ngon, ellipse, rect).
While this does not fix all the ellipse rendering issues, it limits the issue a lot.
e.g. AddRect() w/ size=5, thickness=2 used to trigger AddRectFilled() fallback because threshold was pessimistic to prevent the AddPolyline() issues.
2026-08-06 18:12:09 +02:00
Mikko Mononen
04efdebb14 DrawList: fixed overdraw issue for filled baked corner rendering.
Require all corners to fit inside the rect to avoid overdraw (or fallback to path rendering).
eg. AddRectFilled() w/ size=10, rounding=8 or 10 would break.
2026-08-06 18:12:09 +02:00
thedmd
9695af5162 DrawList: fixed passing large thickness value (e.g. 1e20f) to thickness crashing the code. 2026-08-06 18:12:09 +02:00
ocornut
d9711abaa0 DrawList: fixed AddRectFilled() path for minimum dimension. 2026-08-06 18:12:09 +02:00
ocornut
58f055a9f3 DrawList: baking half-texel in TexUvLines[] now that AddPolylineLegacy() was removed. 2026-08-06 18:12:08 +02:00
ocornut
06313c01ef DrawList: ImDrawFlags_AALineEnds also requires ImDrawFlags_AALine, which makes it easier for widgets to opt-in AAEnds. 2026-08-06 18:12:08 +02:00
ocornut
4fa220d168 DrawList: fixed using ImDrawFlags_UseTexForRoundCorners when ImFontAtlasFlags_NoBakedRoundCorners has also been set. 2026-08-06 18:12:08 +02:00
ocornut
ca9305e304 DrawList: fixed dropping prim flags in some paths (most for ImDrawFlags_AAXXX flags). 2026-08-06 18:12:08 +02:00
Mikko Mononen
3bce489b7a DrawList: fixed filled rect baked AA.
Always add 1px to the fill side of the rounded corner to prevent the corner AA to bleed into the rectangle edges.
2026-08-06 18:12:08 +02:00
ocornut
b5ef1d837d DrawList: Comments. Atlas's NoBakedLines automatically disable AA at Style level. Fix passing non-Legacy stroke mask to PushDrawFlag(). Demo: Custom Rendering: use LiveEdit everywhere. 2026-08-06 18:12:07 +02:00
ocornut
9aec6df4fd Checkbox, Menus: check marks use anti-aliased ends.
Currently not a satisfying resolution.
2026-08-06 18:12:07 +02:00
ocornut
691ea3ff6d DrawList: removed AddPolylineLegacy(), AddConvexPolyFilledLegacy(). 2026-08-06 18:12:07 +02:00
ocornut
5f7012f7ac DrawList: removed g_LEGACY_STROKES. 2026-08-06 18:12:07 +02:00
ocornut
fe8acacdde DrawList: moved no-AA handling into _SelectFringeTexture(). 2026-08-06 18:12:06 +02:00
ocornut
4110aa1184 DrawList: tweak _SelectFringeTexture(). move more-unlikely screen_thickness tests within already-unlikely block. re-add removed asserts. 2026-08-06 18:12:06 +02:00
ocornut
4694b50924 DrawList: moved _GetStrokePos() to a local inline function. 2026-08-06 18:12:06 +02:00
ocornut
fb9fd9a250 DrawList: added PushDrawFlag(), PopDrawFlag(), ImSmallStack_<> 2026-08-06 18:12:06 +02:00
ocornut
59014d15e7 DrawList: consistently support scope flags (ImDrawFlags::Flags) + primitive flags.
ImDrawFlags_AAEnds and ImDrawFlags_StrokeLegacy ok. (the most important ones).
ImDrawFlags_UseTexForRoundCorners ok.
ImDrawFlags_AAFill, ImDrawFlags_AAStrokes: for primitives: only for selected ones taking flags params. Haven't added the flag to all functions because it feels like a fringe use case.
ImDrawFlags_TextNoPixelSnap supported in RenderText(), per-prim (9417)
2026-08-06 18:12:05 +02:00
ocornut
c52b050489 (Breaking) DrawList: removed ImDrawListFlags_in favor of using ImDrawFlags. 2026-08-06 18:12:05 +02:00
ocornut
2c5adecc11 DrawList: new ImDrawFlags API (yet unused in this commit) 2026-08-06 18:12:04 +02:00
ocornut
873afffd8f DrawList: inverted ImDrawFlags_NoAAEnds into ImDrawFlags_AAEnds. 2026-08-06 18:12:04 +02:00
ocornut
f474f9cced DrawList: fixed warnings, added macro to facilitate visualizing rounded corner texture usage. 2026-08-06 18:12:04 +02:00
Mikko Mononen
b35777c58d DrawList: Optimize AddNgon()
- test overestimate before testing more expensive details when testing if stroked ngon is actualy filled
- Note: not a common function, but the test harness is using this to draw a triangle, which makes it show up in profiling
2026-08-06 18:12:04 +02:00
Mikko Mononen
c8867c72dc DrawList: Optimize AddRectFilled()
- detect and draw non-rounded non-AA rect with less branches and calculations
- improves new AddRectFilled() overhead from 30% to 5-10%
2026-08-06 18:12:04 +02:00
Mikko Mononen
9549b6ff7e DrawList: Optimize _SelectFringeTexture()
- store inverse line thickness in the spare texture uv component (same v was stord twice) to avoid division in _SelectFringeTexture
2026-08-06 18:12:04 +02:00
ocornut
9e2b8914c9 DrawList: surround _GetStrokePos() in IM_MSVC_RUNTIME_CHECKS_OFF macro. 2026-08-06 18:12:04 +02:00
ocornut
f9030f92af ImFontAtlas: moved TexUv buffers and configurable defines to internals. 2026-08-06 18:12:03 +02:00
Mikko Mononen
8c2d1befc6 DrawList: Added some comments and amended existing ones 2026-08-06 18:12:02 +02:00
Mikko Mononen
21930ad65c DrawList: Revert texture selection to simple round() in _SelectFringeTexture
- revert texture selection to use just (inlined) round()
- the values were tuned to hide texture selection pops on small thickness
- since we're using super sampling for the problematic range, the tweaks are not necessayr anymore
2026-08-05 21:24:56 +02:00
Mikko Mononen
fe6094886f DrawList: No AA ends when line AA is disabled 2026-08-05 21:24:56 +02:00
Mikko Mononen
4da24b1283 DrawList: merged _AddPolyline back into AddPolyline.
- AddPolyline used to call different versions of _AddPolyline, the separation is not needed anymore, one less function call in debug mode
2026-08-05 21:24:56 +02:00
Mikko Mononen
c4350c537e DrawList: removed vertex offset overflow (for 16-bit ImDrawIdx support) handling.
This seems unnecessary for now.
2026-08-05 21:24:56 +02:00
Mikko Mononen
34fdedfc53 DrawList: restored non-AA rendering mode.
- the ImDrawListFlags_AntiAliasedFill and ImDrawListFlags_AntiAliasedLines flags work again
- added non-AA rendering for polyline and convex poly filled
- do not use corner textures when AA is not used
- Add missing no-AA for single line case
2026-08-05 21:24:56 +02:00
Mikko Mononen
589c83aab9 DrawList: fixed overdraw of transparent rounded rectangles
- transition earlier to _AddRectTinyRounding() to avoid overdraw issues
2026-08-05 21:24:56 +02:00
Mikko Mononen
7a717a297c DrawList: fixed baked corners to better match polyline corners
- added CalcArcStepAndCount() to calculate the step size consistently
- _AddRectTinyRounding: fixed stem placement with thin lines (clamping was needed for an older version of the function)
- _AddRectTinyRounding: fixed texture coordinates (uses if inner/outer were reversed)
- use polygon instead of circle when calculating baked corner rounds (the circle was more accurate but looked different size comparet to polyline)
2026-08-05 21:24:56 +02:00
Mikko Mononen
475c5dadcd DrawList: added macro to have consistent check for rounding
- use macro to test if rounding value is worthy
- changed threshold to be a bit smaller (for smoother handling of small radius), and relative to fringe
2026-08-05 21:24:56 +02:00
Mikko Mononen
13fd81acae DrawList: fixed reserve counts in _AddPolyline(). 2026-08-05 21:24:55 +02:00
ocornut
3cdeeb29ea DrawList: Debug build optimizations: disable over zealous stack checks in PrimReserve, PrimUnreserve, PrimRect, PrimRectUV, PrimQuadUV, _CalculateCenterBiasedOffset, ImAlphaMultiply, _SelectFringeTexture
+ Undo inlined PrimRect() in AddRectFilled().
2026-08-05 21:24:55 +02:00
Mikko Mononen
6753fbdfa2 DrawList: added vertex offset 16-bit ImDrawIdx support for _AddPolyline 2026-08-05 21:24:55 +02:00
Mikko Mononen
e6dad84769 DrawList: improved worst case vertex count for AddConvexPolyFilled, convex polys can have only 2 bevels verts. 2026-08-05 21:24:55 +02:00
Mikko Mononen
065c6c0d0a DrawList: fixed indices when AllowVtxOffset is on
- fix shape closing indices for AddPolyline and _AddRectTinyRounding
2026-08-05 21:24:55 +02:00
Mikko Mononen
2974c9155f DrawList: Optimization: added specialized 2 point polyline _AddLine(). 2026-08-05 21:24:55 +02:00
Mikko Mononen
b6d59d69aa DrawList: added _InvFringeScale to use in cases of 1/_FringeScale. 2026-08-05 21:24:54 +02:00