Ejemplo n.º 1
0
  @Override
  protected void renderImageXform(
      SunGraphics2D sg,
      Image img,
      AffineTransform tx,
      int interpType,
      int sx1,
      int sy1,
      int sx2,
      int sy2,
      Color bgColor) {
    // punt to the MediaLib-based transformImage() in the superclass if:
    //     - bicubic interpolation is specified
    //     - a background color is specified and will be used
    //     - the source surface is neither a texture nor render-to-texture
    //       surface, and a non-default interpolation hint is specified
    //       (we can only control the filtering for texture->surface
    //       copies)
    //         REMIND: we should tweak the sw->texture->surface
    //         transform case to handle filtering appropriately
    //         (see 4841762)...
    //     - an appropriate TransformBlit primitive could not be found
    if (interpType != AffineTransformOp.TYPE_BICUBIC) {
      SurfaceData dstData = sg.surfaceData;
      SurfaceData srcData =
          dstData.getSourceSurfaceData(img, SunGraphics2D.TRANSFORM_GENERIC, sg.imageComp, bgColor);

      if (srcData != null
          && !isBgOperation(srcData, bgColor)
          && (srcData.getSurfaceType() == OGLSurfaceData.OpenGLTexture
              || srcData.getSurfaceType() == OGLSurfaceData.OpenGLSurfaceRTT
              || interpType == AffineTransformOp.TYPE_NEAREST_NEIGHBOR)) {
        SurfaceType srcType = srcData.getSurfaceType();
        SurfaceType dstType = dstData.getSurfaceType();
        TransformBlit blit = TransformBlit.getFromCache(srcType, sg.imageComp, dstType);

        if (blit != null) {
          blit.Transform(
              srcData,
              dstData,
              sg.composite,
              sg.getCompClip(),
              tx,
              interpType,
              sx1,
              sy1,
              0,
              0,
              sx2 - sx1,
              sy2 - sy1);
          return;
        }
      }
    }

    super.renderImageXform(sg, img, tx, interpType, sx1, sy1, sx2, sy2, bgColor);
  }