提交 d920d5a9 编写于 作者: S serb

8039774: [OGL] Image painting is broken if 'sun.java2d.accthreshold' is set to 0

Reviewed-by: bae, flar
上级 0ef6f67a
/* /*
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -310,11 +310,19 @@ public class DrawImage implements DrawImagePipe ...@@ -310,11 +310,19 @@ public class DrawImage implements DrawImagePipe
return false; return false;
} }
/* /**
* Return a BufferedImage of the requested type with the indicated * Return a non-accelerated BufferedImage of the requested type with the
* subimage of the original image located at 0,0 in the new image. * indicated subimage of the original image located at 0,0 in the new image.
* If a bgColor is supplied, composite the original image over that * If a bgColor is supplied, composite the original image over that color
* color with a SrcOver operation, otherwise make a SrcNoEa copy. * with a SrcOver operation, otherwise make a SrcNoEa copy.
* <p>
* Returned BufferedImage is not accelerated for two reasons:
* <ul>
* <li> Types of the image and surface are predefined, because these types
* correspond to the TransformHelpers, which we know we have. And
* acceleration can change the type of the surface
* <li> Image will be used only once and acceleration caching wouldn't help
* </ul>
*/ */
BufferedImage makeBufferedImage(Image img, Color bgColor, int type, BufferedImage makeBufferedImage(Image img, Color bgColor, int type,
int sx1, int sy1, int sx2, int sy2) int sx1, int sy1, int sx2, int sy2)
...@@ -324,6 +332,7 @@ public class DrawImage implements DrawImagePipe ...@@ -324,6 +332,7 @@ public class DrawImage implements DrawImagePipe
final BufferedImage bimg = new BufferedImage(width, height, type); final BufferedImage bimg = new BufferedImage(width, height, type);
final SunGraphics2D g2d = (SunGraphics2D) bimg.createGraphics(); final SunGraphics2D g2d = (SunGraphics2D) bimg.createGraphics();
g2d.setComposite(AlphaComposite.Src); g2d.setComposite(AlphaComposite.Src);
bimg.setAccelerationPriority(0);
if (bgColor != null) { if (bgColor != null) {
g2d.setColor(bgColor); g2d.setColor(bgColor);
g2d.fillRect(0, 0, width, height); g2d.fillRect(0, 0, width, height);
......
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
/**
* @test
* @bug 8039774
* @summary Verifies that we get no exception, when we draw with scale
* BufferedImage to VolatileImage via intermediate texture.
* @author Sergey Bylokhov
* @run main/othervm -Dsun.java2d.accthreshold=0 DrawCachedImageAndTransform
*/
public final class DrawCachedImageAndTransform {
public static void main(String[] args) {
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
GraphicsConfiguration gc = ge.getDefaultScreenDevice()
.getDefaultConfiguration();
VolatileImage vi = gc.createCompatibleVolatileImage(100, 100);
Graphics2D g2d = vi.createGraphics();
g2d.scale(2, 2);
BufferedImage img = new BufferedImage(50, 50,
BufferedImage.TYPE_INT_ARGB);
g2d.drawImage(img, 10, 25, Color.blue, null);
g2d.dispose();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册