Index: src/gpu/SkGpuDevice.cpp |
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp |
index 26392cab2627cdc59325814cfba1eefe6e31ecc2..ac4c02ac0a9c5adf1e94ed63aa6ed53fb8caa6e9 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) { |