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; }
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; }
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; }