--- old/src/share/classes/sun/awt/image/BufImgSurfaceData.java 2014-02-13 14:44:27.000000000 +0400 +++ new/src/share/classes/sun/awt/image/BufImgSurfaceData.java 2014-02-13 14:44:26.000000000 +0400 @@ -236,14 +236,22 @@ sData = createDataSC(bufImg, sType, icm); break; } - sData = new BufImgSurfaceData(raster.getDataBuffer(), - bufImg, SurfaceType.Custom); + sData = createData(raster.getDataBuffer(), bufImg, SurfaceType.Custom); } break; } ((BufImgSurfaceData) sData).initSolidLoops(); return sData; } + + private static BufImgSurfaceData createData(DataBuffer db, BufferedImage bufImg, + SurfaceType sType) + { + if (bufImg instanceof OffScreenImage) { + return ((OffScreenImage)bufImg).new SurfaceData(db, sType); + } + return new BufImgSurfaceData(db, bufImg, sType); + } public static SurfaceData createData(Raster ras, ColorModel cm) { throw new InternalError("SurfaceData not implemented for Raster/CM"); @@ -253,8 +261,7 @@ SurfaceType sType) { IntegerComponentRaster icRaster = (IntegerComponentRaster)bImg.getRaster(); - BufImgSurfaceData bisd = - new BufImgSurfaceData(icRaster.getDataBuffer(), bImg, sType); + BufImgSurfaceData bisd = createData(icRaster.getDataBuffer(), bImg, sType); bisd.initRaster(icRaster.getDataStorage(), icRaster.getDataOffset(0) * 4, 0, icRaster.getWidth(), @@ -270,8 +277,7 @@ IndexColorModel icm) { ShortComponentRaster scRaster = (ShortComponentRaster)bImg.getRaster(); - BufImgSurfaceData bisd = - new BufImgSurfaceData(scRaster.getDataBuffer(), bImg, sType); + BufImgSurfaceData bisd = createData(scRaster.getDataBuffer(), bImg, sType); bisd.initRaster(scRaster.getDataStorage(), scRaster.getDataOffset(0) * 2, 0, scRaster.getWidth(), @@ -287,8 +293,7 @@ int primaryBank) { ByteComponentRaster bcRaster = (ByteComponentRaster)bImg.getRaster(); - BufImgSurfaceData bisd = - new BufImgSurfaceData(bcRaster.getDataBuffer(), bImg, sType); + BufImgSurfaceData bisd = createData(bcRaster.getDataBuffer(), bImg, sType); ColorModel cm = bImg.getColorModel(); IndexColorModel icm = ((cm instanceof IndexColorModel) ? (IndexColorModel) cm @@ -307,8 +312,7 @@ SurfaceType sType) { BytePackedRaster bpRaster = (BytePackedRaster)bImg.getRaster(); - BufImgSurfaceData bisd = - new BufImgSurfaceData(bpRaster.getDataBuffer(), bImg, sType); + BufImgSurfaceData bisd = createData(bpRaster.getDataBuffer(), bImg, sType); ColorModel cm = bImg.getColorModel(); IndexColorModel icm = ((cm instanceof IndexColorModel) ? (IndexColorModel) cm