On Fri, 9 Feb 2024 16:24:21 GMT, Kevin Rushforth <k...@openjdk.org> wrote:
>> 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: > > more review feedback tests/system/src/test/java/test/robot/javafx/scene/TransparentLCDTest.java line 172: > 170: @AfterAll > 171: public static void doTeardownOnce() { > 172: Util.shutdown(); I am sorry, Kevin, you just walked into a trap carefully laid by me before. Util.shutdown() needs a Stage argument, otherwise it does nothing. Perhaps we could change the impl. to shutdown all the stages regardless instead of passing an array of them. And, of course, there is more than one place where we do it. Good job, me! ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1361#discussion_r1484600775