diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-03-17 21:31:26 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-03-17 21:31:26 +0000 |
commit | a713f9c6f6a06d216d53e268b9c691941053dabf (patch) | |
tree | b30ac83502f95e32d621d06b2421da8799b5150d /src/gpu | |
parent | f338d7c860bf0bca82cac793069522311a3dbb1a (diff) |
add new readPixels with direct memory parameters
BUG=skia:
R=scroggo@google.com, bsalomon@google.com, robertphillips@google.com, fmalita@google.com
Author: reed@google.com
Review URL: https://codereview.chromium.org/199413013
git-svn-id: http://skia.googlecode.com/svn/trunk@13840 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 26392cab26..ac4c02ac0a 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -343,6 +343,7 @@ void SkGpuDevice::makeRenderTargetCurrent() { /////////////////////////////////////////////////////////////////////////////// +#ifdef SK_SUPPORT_LEGACY_READPIXELSCONFIG namespace { GrPixelConfig config8888_to_grconfig_and_flags(SkCanvas::Config8888 config8888, uint32_t* flags) { switch (config8888) { @@ -379,7 +380,7 @@ bool SkGpuDevice::onReadPixels(const SkBitmap& bitmap, SkASSERT(SkBitmap::kARGB_8888_Config == bitmap.config()); SkASSERT(!bitmap.isNull()); SkASSERT(SkIRect::MakeWH(this->width(), this->height()).contains(SkIRect::MakeXYWH(x, y, bitmap.width(), bitmap.height()))); - + SkAutoLockPixels alp(bitmap); GrPixelConfig config; uint32_t flags; @@ -393,6 +394,25 @@ bool SkGpuDevice::onReadPixels(const SkBitmap& bitmap, bitmap.rowBytes(), flags); } +#endif + +bool SkGpuDevice::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, + int x, int y) { + DO_DEFERRED_CLEAR(); + + // TODO: teach fRenderTarget to take ImageInfo directly to specify the src pixels + GrPixelConfig config = SkImageInfo2GrPixelConfig(dstInfo.colorType(), dstInfo.alphaType()); + if (kUnknown_GrPixelConfig == config) { + return false; + } + + uint32_t flags = 0; + if (kUnpremul_SkAlphaType == dstInfo.alphaType()) { + flags = GrContext::kUnpremul_PixelOpsFlag; + } + return fContext->readRenderTargetPixels(fRenderTarget, x, y, dstInfo.width(), dstInfo.height(), + config, dstPixels, dstRowBytes, flags); +} bool SkGpuDevice::onWritePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes, int x, int y) { |