Exemplo n.º 1
0
bool
SourceSurfaceSkia::InitFromTexture(DrawTargetSkia* aOwner,
                                   unsigned int aTexture,
                                   const IntSize &aSize,
                                   SurfaceFormat aFormat)
{
    MOZ_ASSERT(aOwner, "null GrContext");
#ifdef USE_SKIA_GPU
    GrBackendTextureDesc skiaTexGlue;
    mSize.width = skiaTexGlue.fWidth = aSize.width;
    mSize.height = skiaTexGlue.fHeight = aSize.height;
    skiaTexGlue.fFlags = kNone_GrBackendTextureFlag;
    skiaTexGlue.fOrigin = kBottomLeft_GrSurfaceOrigin;
    skiaTexGlue.fConfig = GfxFormatToGrConfig(aFormat);
    skiaTexGlue.fSampleCnt = 0;
    skiaTexGlue.fTextureHandle = aTexture;

    GrTexture *skiaTexture = aOwner->mGrContext->wrapBackendTexture(skiaTexGlue);
    SkImageInfo imgInfo = SkImageInfo::Make(aSize.width, aSize.height, GfxFormatToSkiaColorType(aFormat), kOpaque_SkAlphaType);
    SkGrPixelRef *texRef = new SkGrPixelRef(imgInfo, skiaTexture, false);
    mBitmap.setInfo(imgInfo);
    mBitmap.setPixelRef(texRef);
    mFormat = aFormat;
    mStride = mBitmap.rowBytes();
#endif

    mDrawTarget = aOwner;
    return true;
}
Exemplo n.º 2
0
bool
DrawTargetSkia::InitWithGrContext(GrContext* aGrContext,
                                  const IntSize &aSize,
                                  SurfaceFormat aFormat)
{
  MOZ_ASSERT(aGrContext, "null GrContext");

  mGrContext = aGrContext;

  mSize = aSize;
  mFormat = aFormat;

  GrTextureDesc targetDescriptor;

  targetDescriptor.fFlags = kRenderTarget_GrTextureFlagBit;
  targetDescriptor.fWidth = mSize.width;
  targetDescriptor.fHeight = mSize.height;
  targetDescriptor.fConfig = GfxFormatToGrConfig(mFormat);
  targetDescriptor.fOrigin = kBottomLeft_GrSurfaceOrigin;
  targetDescriptor.fSampleCnt = 0;

  SkAutoTUnref<GrTexture> skiaTexture(mGrContext->createUncachedTexture(targetDescriptor, NULL, 0));
  if (!skiaTexture) {
    return false;
  }

  mTexture = (uint32_t)skiaTexture->getTextureHandle();

  SkAutoTUnref<SkBaseDevice> device(new SkGpuDevice(mGrContext.get(), skiaTexture->asRenderTarget()));
  SkAutoTUnref<SkCanvas> canvas(new SkCanvas(device.get()));
  mCanvas = canvas.get();

  return true;
}
Exemplo n.º 3
0
void
DrawTargetSkia::InitWithFBO(unsigned int aFBOID, GrContext* aGrContext, const IntSize &aSize, SurfaceFormat aFormat)
{
  GrPlatformRenderTargetDesc targetDescriptor;

  targetDescriptor.fWidth = aSize.width;
  targetDescriptor.fHeight = aSize.height;
  targetDescriptor.fConfig = GfxFormatToGrConfig(aFormat);
  targetDescriptor.fSampleCnt = 0;
  targetDescriptor.fRenderTargetHandle = aFBOID;

  SkAutoTUnref<GrRenderTarget> target(aGrContext->createPlatformRenderTarget(targetDescriptor));

  SkAutoTUnref<SkDevice> device(new SkGpuDevice(aGrContext, target.get()));
  SkAutoTUnref<SkCanvas> canvas(new SkCanvas(device.get()));
  mSize = aSize;

  mDevice = device.get();
  mCanvas = canvas.get();
  mFormat = aFormat;
}