--- old/src/java.desktop/share/classes/sun/java2d/opengl/OGLSurfaceData.java 2015-03-25 17:43:16.000000000 +0300 +++ new/src/java.desktop/share/classes/sun/java2d/opengl/OGLSurfaceData.java 2015-03-25 17:43:16.000000000 +0300 @@ -25,10 +25,7 @@ package sun.java2d.opengl; -import java.awt.AlphaComposite; -import java.awt.GraphicsEnvironment; -import java.awt.Rectangle; -import java.awt.Transparency; +import java.awt.*; import java.awt.image.ColorModel; import java.awt.image.Raster; import sun.awt.SunHints; @@ -400,9 +397,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 - * - and the destination is opaque + * - the source color is opaque, and + * - blending is SrcOverNoEa or disabled * * Eventually, we could enhance the native OGL text rendering code * and remove the above restrictions, but that would require significantly @@ -411,9 +407,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) {