867 srcTmp = new WeakReference<>(src); |
867 srcTmp = new WeakReference<>(src); |
868 } |
868 } |
869 } |
869 } |
870 } |
870 } |
871 |
871 |
872 class OGLAnyCompositeBlit extends Blit { |
872 final class OGLAnyCompositeBlit extends Blit { |
873 private WeakReference<SurfaceData> dstTmp; |
873 private WeakReference<SurfaceData> dstTmp; |
874 |
874 |
875 OGLAnyCompositeBlit() { |
875 OGLAnyCompositeBlit() { |
876 super(SurfaceType.Any, CompositeType.Any, OGLSurfaceData.OpenGLSurface); |
876 super(SurfaceType.Any, CompositeType.Any, OGLSurfaceData.OpenGLSurface); |
877 } |
877 } |
893 } |
893 } |
894 |
894 |
895 // convert destination to IntArgbPre |
895 // convert destination to IntArgbPre |
896 SurfaceData dstBuffer = convertFrom(convertdst, dst, dx, dy, w, h, |
896 SurfaceData dstBuffer = convertFrom(convertdst, dst, dx, dy, w, h, |
897 cachedDst, BufferedImage.TYPE_INT_ARGB_PRE); |
897 cachedDst, BufferedImage.TYPE_INT_ARGB_PRE); |
|
898 Region bufferClip = |
|
899 clip == null ? null : clip.getTranslatedRegion(-dx, -dy); |
898 |
900 |
899 Blit performop = Blit.getFromCache(src.getSurfaceType(), |
901 Blit performop = Blit.getFromCache(src.getSurfaceType(), |
900 CompositeType.Any, dstBuffer.getSurfaceType()); |
902 CompositeType.Any, dstBuffer.getSurfaceType()); |
901 |
903 performop.Blit(src, dstBuffer, comp, bufferClip, sx, sy, 0, 0, w, h); |
902 performop.Blit(src, dstBuffer, comp, clip, sx, sy, 0, 0, w, h); |
|
903 |
904 |
904 if (dstBuffer != cachedDst) { |
905 if (dstBuffer != cachedDst) { |
905 // cache the intermediate surface |
906 // cache the intermediate surface |
906 dstTmp = new WeakReference<>(dstBuffer); |
907 dstTmp = new WeakReference<>(dstBuffer); |
907 } |
908 } |