> JavaFX LCD text rendering (aka sub-pixel antialiasing) uses a pixel shader 
> and alpha blending. The alpha channel is used is ways that interfere with its 
> use for transparency. The existing logic checks that the current blend 
> equation is SRC_OVER and that the surface is opaque, and that we are 
> rendering using a Paint of type Color. It fails to check that the text color 
> is opaque. When it isn't, the resulting alpha value is not preserved, even in 
> the middle of the filled portion of the text, resulting in a visually 
> noticeable difference in color.
> 
> ![transparent-lcd-text](https://github.com/openjdk/jfx/assets/34689748/81f9503c-c706-44d8-b4db-6b47f0eb5fea)
> 
> The solution is to add the missing check for alpha == 1 to the test that 
> checks whether we can use LCD text rendering. I note that Java2D falls back 
> to gray scale when the text color is transparent for a similar reason.
> 
> I added a robot test that checks the color in the middle of the filled 
> portion of a rendered text character and also checks that we use LCD for 
> opaque colors and GRAY scale for transparent colors.

Kevin Rushforth has updated the pull request incrementally with one additional 
commit since the last revision:

  Address review feedback

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

Changes:
  - all: https://git.openjdk.org/jfx/pull/1361/files
  - new: https://git.openjdk.org/jfx/pull/1361/files/25ad1dab..62c768cf

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

  Stats: 19 lines in 2 files changed: 0 ins; 9 del; 10 mod
  Patch: https://git.openjdk.org/jfx/pull/1361.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1361/head:pull/1361

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

Reply via email to