--- old/modules/graphics/src/main/java/com/sun/javafx/sg/prism/CacheFilter.java 2015-05-04 15:39:09.000000000 -0700 +++ new/modules/graphics/src/main/java/com/sun/javafx/sg/prism/CacheFilter.java 2015-05-04 15:39:09.000000000 -0700 @@ -658,14 +658,21 @@ if (xform != null) { TEMP_CACHEFILTER_TRANSFORM.concatenate(xform); } - if (dirtyBounds != null) { - TEMP_CONTAINER.deriveWithNewRegion((RectBounds)TEMP_BOUNDS.deriveWithNewBounds(dirtyBounds)); - // Culling might save us a lot when there's a dirty region - node.doPreCulling(TEMP_CONTAINER, TEMP_CACHEFILTER_TRANSFORM, new GeneralTransform3D()); - g.setHasPreCullingBits(true); - g.setClipRectIndex(0); - g.setClipRect(dirtyBounds); - } + + // Disable buggy pre-culling optimization. This bug is too complex and + // risky to fix for 8u60, we will revisit it in 9. + // This bug may be another case where this optimization will break but + // it isn't included in impl_scrollCacheCapable() to disable scroll caching. + // Look at the Region check segment. +// if (dirtyBounds != null) { +// TEMP_CONTAINER.deriveWithNewRegion((RectBounds)TEMP_BOUNDS.deriveWithNewBounds(dirtyBounds)); +// // Culling might save us a lot when there's a dirty region +// node.doPreCulling(TEMP_CONTAINER, TEMP_CACHEFILTER_TRANSFORM, new GeneralTransform3D()); +// g.setHasPreCullingBits(true); +// g.setClipRectIndex(0); +// g.setClipRect(dirtyBounds); +// } + g.transform(TEMP_CACHEFILTER_TRANSFORM); if (node.getClipNode() != null) { node.renderClip(g); --- old/modules/graphics/src/main/java/com/sun/javafx/sg/prism/NGNode.java 2015-05-04 15:39:10.000000000 -0700 +++ new/modules/graphics/src/main/java/com/sun/javafx/sg/prism/NGNode.java 2015-05-04 15:39:10.000000000 -0700 @@ -810,6 +810,8 @@ } else { markDirty(); } + } else { + markDirty(); } }