Chromium Code Reviews| Index: src/gpu/GrContext.cpp |
| diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp |
| index dca58745d7d04f46cbc757b156ba7e23ff9dcc05..2bae8c6414a4339bd78f23ed63ec6ddcbe2d9985 100644 |
| --- a/src/gpu/GrContext.cpp |
| +++ b/src/gpu/GrContext.cpp |
| @@ -1238,7 +1238,6 @@ bool GrContext::readTexturePixels(GrTexture* texture, |
| SK_TRACE_EVENT0("GrContext::readTexturePixels"); |
| ASSERT_OWNED_RESOURCE(texture); |
| - // TODO: code read pixels for textures that aren't also rendertargets |
| GrRenderTarget* target = texture->asRenderTarget(); |
| if (NULL != target) { |
| return this->readRenderTargetPixels(target, |
| @@ -1246,6 +1245,27 @@ bool GrContext::readTexturePixels(GrTexture* texture, |
| config, buffer, rowBytes, |
| flags); |
| } else { |
| + // TODO: make this more efficient for cases where we're reading the entire |
| + // texture, i.e., use GetTexImage() instead |
| + |
| + // create scratch rendertarget and read from that |
| + GrAutoScratchTexture ast; |
| + GrTextureDesc desc; |
| + desc.fFlags = kRenderTarget_GrTextureFlagBit; |
| + desc.fWidth = width; |
| + desc.fHeight = height; |
| + desc.fConfig = config; |
| + desc.fOrigin = kTopLeft_GrSurfaceOrigin; |
| + ast.set(this, desc, kExact_ScratchTexMatch); |
| + GrTexture* dst = ast.texture(); |
|
robertphillips
2013/10/18 18:19:45
NULL != dst
|
| + if (dst && NULL != (target = dst->asRenderTarget())) { |
| + this->copyTexture(texture, target, NULL); |
| + return this->readRenderTargetPixels(target, |
| + left, top, width, height, |
| + config, buffer, rowBytes, |
| + flags); |
| + } |
| + |
| return false; |
| } |
| } |