diff -r 25a62bb54efa -r 062c7363dd12 jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLSurfaceData.java --- a/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLSurfaceData.java Fri May 29 08:58:46 2015 +0900 +++ b/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLSurfaceData.java Fri May 29 18:32:58 2015 +0300 @@ -26,6 +26,7 @@ package sun.java2d.opengl; import java.awt.AlphaComposite; +import java.awt.Composite; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.Transparency; @@ -400,8 +401,8 @@ /** * For now, we can only render LCD text if: * - the fragment shader extension is available, and - * - blending is disabled, and - * - the source color is opaque + * - the source color is opaque, and + * - blending is SrcOverNoEa or disabled * - and the destination is opaque * * Eventually, we could enhance the native OGL text rendering code @@ -411,9 +412,19 @@ public boolean canRenderLCDText(SunGraphics2D sg2d) { return graphicsConfig.isCapPresent(CAPS_EXT_LCD_SHADER) && - sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY && + sg2d.surfaceData.getTransparency() == Transparency.OPAQUE && sg2d.paintState <= SunGraphics2D.PAINT_OPAQUECOLOR && - sg2d.surfaceData.getTransparency() == Transparency.OPAQUE; + (sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY || + (sg2d.compositeState <= SunGraphics2D.COMP_ALPHA && canHandleComposite(sg2d.composite))); + } + + private boolean canHandleComposite(Composite c) { + if (c instanceof AlphaComposite) { + AlphaComposite ac = (AlphaComposite)c; + + return ac.getRule() == AlphaComposite.SRC_OVER && ac.getAlpha() >= 1f; + } + return false; } public void validatePipe(SunGraphics2D sg2d) {