--- 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) {