On Mon, 31 Aug 2026 16:04:47 GMT, Martin Fox <[email protected]> wrote:

>> This PR attempts to improve LCD text rendering on Windows and Linux. Changes 
>> include:
>> 
>> - (Windows only) When setting up DirectWrite the code now uses the 
>> NATURAL_SYMMETRIC rendering mode except for very small glyphs where it uses 
>> NATURAL. Using NATURAL_SYMMETRIC avoids distorted glyphs at specific pixel 
>> sizes (see [JDK-8389632](https://bugs.openjdk.org/browse/JDK-8389632)) and 
>> retains the curves along the top and bottom of the glyphs. Using NATURAL at 
>> small sizes avoids glyphs turning very fuzzy and light.
>> 
>> - The code is now consistently converts the colors from sRGB to a linear 
>> space (more or less), composites them, and then converts the result back to 
>> sRGB.
>> 
>> - The shader applies a contrast equation to the LCD glyph mask which helps 
>> emphasize the stems. The same equation is used by Skia and probably added by 
>> Microsoft when they cleaned up text rendering for Chromium. BTW it’s just 
>> the equation for a parabola that goes through points (0, 0) and (1, 1).
>> 
>> My testing was mostly done on a 27 inch display with a resolution of 
>> 2560x1440 and a screen scale of 150%. This was low enough to notice a 
>> difference. Resolutions higher than that (like full-on Retina) tend to hide 
>> a lot of sins.
>> 
>> I recommend reading “The Raster Tragedy in Skia” which is concise but covers 
>> a lot of ground. It contains a section on the challenges of compositing text 
>> in sRGB space and also the issues getting LCD text to look dark enough 
>> without inflating the stems. I wish I had found this earlier in the process.
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Martin Fox has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Added manual text rendering test

Perhaps a little OT, but I always wondered, would it theoretically be possible 
to have something like this? https://github.com/Chlumsky/msdfgen
>From what I understand, it's like the state of the art of fonts rendering

-------------

PR Comment: https://git.openjdk.org/jfx/pull/2284#issuecomment-5538727186

Reply via email to