[Bug 60464] New: Direct2D collinear joins extend a stroked open path past its endpoint
http://bugs.winehq.org/show_bug.cgi?id=60464 Bug ID: 60464 Summary: Direct2D collinear joins extend a stroked open path past its endpoint Product: Wine Version: 11.17 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: d2d Assignee: wine-bugs@list.winehq.org Reporter: rod.huffaker@gmail.com Target Milestone: --- Distribution: --- Created attachment 82289 --> http://bugs.winehq.org/attachment.cgi?id=82289 pedigree-line-join-probe.c — standalone C pixel reproducer (AI-assisted) A collinear intermediate vertex causes a Direct2D stroked open path to extend well beyond its endpoint. This produces extra tails on connectors in RootsMagic 11's Pedigree and Family views. The attached standalone C reproducer requires no RootsMagic installation or database. It creates a 64x64 DXGI surface at 192 DPI and draws a 1.5-DIP black stroke on a gray background. It compares: 1. A single segment from (2,16) to (8,16). 2. The same path with an intermediate vertex at (6,16). Expected: both paths leave the pixel at x=25 DIP (device pixel x=50, y=32) gray. Actual: the single-segment control leaves it gray, but the collinear path makes it black. Test environment: Linux Mint 22.3, x86_64; 32-bit D3D11/Direct2D; Wine 11.17 Direct2D sources used with this project's Wine 11.0 loader/runtime; Vulkan renderer; 192 DPI. This was a local mixed-version runtime, not a complete stock Wine 11.17 installation. We have not verified the latest unmodified Wine release or run this probe on native Windows. Build: i686-w64-mingw32-gcc -std=c99 -O2 -Wall -Werror pedigree-line-join-probe.c -o probe.exe -ld2d1 -ld3d11 -ldxguid -luuid -lole32 Run: WINEPREFIX=/path/to/test-prefix WINEDLLOVERRIDES='d2d1,dwrite=b;d3d11,d3d10core,dxgi=b' WINE_D3D_CONFIG=renderer=vulkan WINEDEBUG=-all wine probe.exe Recorded results: without the local join fix, the control sampled inside=0, beyond=128, while the collinear case sampled inside=0, beyond=0 (exit 1). With the local join fix both cases sampled inside=0, beyond=128 (exit 0). Investigation points to d2d_geometry_outline_add_join() in dlls/d2d1/geometry.c. The straight-through vertex takes the ccw == 0 branch, which creates join vertices 25 units away. A local proof-of-concept skips the join when ccw == 0 and the normalized tangent dot product is negative, retaining the reversal case. This corrected the pixel probe and the visible connector tails in both application views. This is a diagnosis to review, not a claim of a fully validated upstream fix. This report and standalone reproducer were prepared with AI assistance. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
participants (1)
-
WineHQ Bugzilla