Add support for reading non-rendertarget textures.
Also removes rendertarget flag from GrAtlas texture creation (no
longer needed) and re-enables GrFontCache::dump().
R=robertphillips@google.com
Author: jvanverth@google.com
Review URL: https://codereview.chromium.org/29263004
git-svn-id: http://skia.googlecode.com/svn/trunk/src@11917 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/GrAtlas.cpp b/gpu/GrAtlas.cpp
index acf0f28..dd36290 100644
--- a/gpu/GrAtlas.cpp
+++ b/gpu/GrAtlas.cpp
@@ -177,14 +177,7 @@
if (NULL == fTexture) {
// TODO: Update this to use the cache rather than directly creating a texture.
GrTextureDesc desc;
-#ifdef SK_DEVELOPER
- // RenderTarget so we can read the pixels to dump them
- // TODO: Fix to support RT
- desc.fFlags = kDynamicUpdate_GrTextureFlagBit;//|kRenderTarget_GrTextureFlagBit;
- //|kNoStencil_GrTextureFlagBit;
-#else
desc.fFlags = kDynamicUpdate_GrTextureFlagBit;
-#endif
desc.fWidth = GR_ATLAS_TEXTURE_WIDTH;
desc.fHeight = GR_ATLAS_TEXTURE_HEIGHT;
desc.fConfig = fPixelConfig;
diff --git a/gpu/GrContext.cpp b/gpu/GrContext.cpp
index ea1df6e..a84d8ee 100644
--- a/gpu/GrContext.cpp
+++ b/gpu/GrContext.cpp
@@ -1238,7 +1238,6 @@
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 @@
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();
+ if (NULL != dst && NULL != (target = dst->asRenderTarget())) {
+ this->copyTexture(texture, target, NULL);
+ return this->readRenderTargetPixels(target,
+ left, top, width, height,
+ config, buffer, rowBytes,
+ flags);
+ }
+
return false;
}
}
diff --git a/gpu/GrTextStrike.cpp b/gpu/GrTextStrike.cpp
index ab7d8f0..e21fd48 100644
--- a/gpu/GrTextStrike.cpp
+++ b/gpu/GrTextStrike.cpp
@@ -173,7 +173,6 @@
#ifdef SK_DEVELOPER
void GrFontCache::dump() const {
-/* Disabled for now
static int gDumpCount = 0;
for (int i = 0; i < kMaskFormatCount; ++i) {
if (NULL != fAtlasMgr[i]) {
@@ -186,7 +185,6 @@
}
}
++gDumpCount;
-*/
}
#endif