Hello.
Please review the fix for jdk 9.
The bug occurs, when we try to call drawImageBg with scale and 'sun.java2d.accthreshold' is set to 0.

The bug exists in the DrawImage.renderImageXform(). This method is called, when all our attempts to scale the image fails, and we create a buffered image, and use it as intermediate buffer. Note that the buffered image has predefined image type (TYPE_INT_RGB/TYPE_INT_ARGB), because we know that for these types we have necessary tranform helpers. So if "sun.java2d.accthreshold" set to 0 the next code [1] is broken, because dstData.getSourceSurfaceData() returns cached version of the surface, which is unexpected.

[1]:
            srcData = dstData.getSourceSurfaceData(img,
SunGraphics2D.TRANSFORM_GENERIC,
                                                   sg.imageComp,
                                                   null);
            srcType = srcData.getSurfaceType();
            helper = TransformHelper.getFromCache(srcType);

!!!!! helper is null here.

I can reproduce the problem on OGL, and sure that it will be reproduced on d3d as well.

BTW: we have to do something with this code path because DrawImageBg() in this scenario 10000 slower than DrawImage().

Bug: https://bugs.openjdk.java.net/browse/JDK-8039774
Webrev can be found at: http://cr.openjdk.java.net/~serb/8039774/webrev.00

--
Best regards, Sergey.

Reply via email to