1110 Commits

Author SHA1 Message Date
Mikko Mononen
6aa6626f29 DrawList: improved handling of very small circles.
See testbed case 354.
2026-10-12 15:31:16 +02:00
ocornut
b2ade5f3ad DrawList: AddRectFilled: add support for ImDrawFlags_StrokeLegacy to handle inverted coordinates + non-AA path.
Fix cases 207 and 251 in testbed.
+ add braces near an IM_APPEND_TRI() to silence PVS-Studio reasonable warning "V640  The code's operational logic does not correspond with its formatting"
2026-10-07 19:07:18 +02:00
ocornut
75ac1ab2c3 DrawList: AddCircle: fixed issue not clearing path in unlikely case where Path.Size<3. 2026-10-07 18:53:55 +02:00
Mikko Mononen
9e5e0bf9b2 DrawList: added explanation for IM_POLYLINE_CONVEX_POLY_MAX_BEVELS. 2026-10-07 18:53:55 +02:00
ocornut
f84d77c424 DrawList: changed _GetStrokePos() to a macro. 2026-10-07 18:53:55 +02:00
ocornut
cb66fcdaac DrawList: rename ImDrawFlags_MiterOnly->ImDrawFlags_JoinMiter, ImDrawFlags_SquareCap->ImDrawFlags_CapSquare. 2026-10-07 18:53:55 +02:00
ocornut
7bccc3bc1e DrawList: AddCircle, AddCircleFilled: fixed large circles being under-tessellated (when above ~140 with default CircleTessellationMaxError). 2026-10-07 18:53:55 +02:00
ocornut
475b793baa Docs: reworked Changelog, comments. 2026-10-07 18:53:55 +02:00
ocornut
0e756a649d (Breaking) DrawList: renamed ImDrawFlags_RoundCornersXXX to ImDrawFlags_RoundXXX. (#9504) 2026-10-07 18:53:55 +02:00
ocornut
c52f84c719 DrawList: rework _SelectFringeTexture() for use by third-party extensions + rename to _SelectLineTexture(). 2026-10-07 18:53:55 +02:00
ocornut
7415edbad1 DrawList: fixed ImFontAtlasBuildUpdateTexDataCorners() packing vs render to match. 2026-10-07 18:53:55 +02:00
ocornut
dee0e34504 DrawList: amend PushDrawFlag() to report reaching capacity. 2026-10-07 18:53:55 +02:00
ocornut
230cd6feb0 DrawList: simplify ImFontAtlasBuildUpdateTexDataCorners() by merging fill/strokes loops. 2026-10-07 18:53:54 +02:00
Mikko Mononen
3dbb849acf 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-10-07 18:53:54 +02:00
Mikko Mononen
c6c352f77d 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-10-07 18:53:54 +02:00
Mikko Mononen
91dc4f456a 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-10-07 18:53:54 +02:00
Mikko Mononen
475660f53c 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-10-07 18:53:54 +02:00
thedmd
640e931284 DrawList: fixed passing large thickness value (e.g. 1e20f) to thickness crashing the code. 2026-10-07 18:53:54 +02:00
ocornut
a547deed9b DrawList: fixed AddRectFilled() path for minimum dimension. 2026-10-07 18:53:54 +02:00
ocornut
059017188d DrawList: baking half-texel in TexUvLines[] now that AddPolylineLegacy() was removed. 2026-10-07 18:53:54 +02:00
ocornut
deb9c70ace DrawList: ImDrawFlags_AALineEnds also requires ImDrawFlags_AALine, which makes it easier for widgets to opt-in AAEnds. 2026-10-07 18:53:54 +02:00
ocornut
20f17eeb6f DrawList: fixed using ImDrawFlags_UseTexForRoundCorners when ImFontAtlasFlags_NoBakedRoundCorners has also been set. 2026-10-07 18:53:54 +02:00
ocornut
a597beaf95 DrawList: fixed dropping prim flags in some paths (most for ImDrawFlags_AAXXX flags). 2026-10-07 18:53:54 +02:00
Mikko Mononen
ba918bc45c 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-10-07 18:53:54 +02:00
ocornut
7a510274ce 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-10-07 18:53:54 +02:00
ocornut
b220bffdbb Checkbox, Menus: check marks use anti-aliased ends.
Currently not a satisfying resolution.
2026-10-07 18:53:54 +02:00
ocornut
46e4c26095 DrawList: removed AddPolylineLegacy(), AddConvexPolyFilledLegacy(). 2026-10-07 18:53:53 +02:00
ocornut
5181e95a46 DrawList: removed g_LEGACY_STROKES. 2026-10-07 18:53:53 +02:00
ocornut
67bcd9d545 DrawList: moved no-AA handling into _SelectFringeTexture(). 2026-10-07 18:53:53 +02:00
ocornut
f511ce18f9 DrawList: tweak _SelectFringeTexture(). move more-unlikely screen_thickness tests within already-unlikely block. re-add removed asserts. 2026-10-07 18:53:53 +02:00
ocornut
2fdcf895c8 DrawList: moved _GetStrokePos() to a local inline function. 2026-10-07 18:53:53 +02:00
ocornut
f2cd901be6 DrawList: added PushDrawFlag(), PopDrawFlag(), ImSmallStack_<>. (#9504) 2026-10-07 18:53:53 +02:00
ocornut
7e87cb984d 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-10-07 18:53:53 +02:00
ocornut
02adb46a9f (Breaking) DrawList: removed ImDrawListFlags_in favor of using ImDrawFlags.
# Conflicts:
#	imgui.cpp
2026-10-07 18:53:53 +02:00
ocornut
cf85b48e55 DrawList: new ImDrawFlags API (yet unused in this commit) 2026-10-07 18:53:52 +02:00
ocornut
eb75c8056e DrawList: inverted ImDrawFlags_NoAAEnds into ImDrawFlags_AAEnds. 2026-10-07 18:53:52 +02:00
ocornut
9b608ba079 DrawList: fixed warnings, added macro to facilitate visualizing rounded corner texture usage. 2026-10-07 18:53:52 +02:00
Mikko Mononen
10aa5d92e6 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-10-07 18:53:52 +02:00
Mikko Mononen
145b838818 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-10-07 18:53:52 +02:00
Mikko Mononen
c5c76dcda5 DrawList: Optimize _SelectFringeTexture()
- store inverse line thickness in the spare texture uv component (same v was stord twice) to avoid division in _SelectFringeTexture
2026-10-07 18:53:52 +02:00
ocornut
d9378b71c5 DrawList: surround _GetStrokePos() in IM_MSVC_RUNTIME_CHECKS_OFF macro. 2026-10-07 18:53:52 +02:00
ocornut
230249ad58 ImFontAtlas: moved TexUv buffers and configurable defines to internals. 2026-10-07 18:53:52 +02:00
Mikko Mononen
efb5c0e1da DrawList: Added some comments and amended existing ones 2026-10-07 18:53:52 +02:00
Mikko Mononen
b181739cea 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-10-07 18:53:52 +02:00
Mikko Mononen
d24d23fb40 DrawList: No AA ends when line AA is disabled 2026-10-07 18:53:52 +02:00
Mikko Mononen
f272141a4d 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-10-07 18:53:52 +02:00
Mikko Mononen
9be9c998d7 DrawList: removed vertex offset overflow (for 16-bit ImDrawIdx support) handling.
This seems unnecessary for now.
2026-10-07 18:53:52 +02:00
Mikko Mononen
478813c359 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-10-07 18:53:52 +02:00
Mikko Mononen
a5d8450a0f DrawList: fixed overdraw of transparent rounded rectangles
- transition earlier to _AddRectTinyRounding() to avoid overdraw issues
2026-10-07 18:53:52 +02:00
Mikko Mononen
2edac09d9f 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-10-07 18:53:52 +02:00