[OpenJDK 2D-Dev]  Review Request: 8039774 [OGL] Image painting is broken if 'sun.java2d.accthreshold' is set to 0
Sergey.Bylokhov at oracle.com
Thu Apr 10 11:45:04 UTC 2014
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  is broken,
because dstData.getSourceSurfaceData() returns cached version of the
surface, which is unexpected.
srcData = dstData.getSourceSurfaceData(img,
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().
Webrev can be found at: http://cr.openjdk.java.net/~serb/8039774/webrev.00
Best regards, Sergey.
More information about the 2d-dev