> 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

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

Changes:
  - all: https://git.openjdk.org/jfx/pull/2284/files
  - new: https://git.openjdk.org/jfx/pull/2284/files/069f9f66..c7654462

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=2284&range=01
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=2284&range=00-01

  Stats: 134 lines in 3 files changed: 132 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jfx/pull/2284.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/2284/head:pull/2284

PR: https://git.openjdk.org/jfx/pull/2284

Reply via email to