Index: src/gpu/gl/GrGpuGL.cpp |
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp |
index 9c0860a2d4c31e282b7e914a0f0fdbc7676e21c8..9c3efdf134610ee52e0a83aab0269a52b20be674 100644 |
--- a/src/gpu/gl/GrGpuGL.cpp |
+++ b/src/gpu/gl/GrGpuGL.cpp |
@@ -2405,11 +2405,8 @@ bool GrGpuGL::onCopySurface(GrSurface* dst, |
GrSurface* src, |
const SkIRect& srcRect, |
const SkIPoint& dstPoint) { |
- bool inheritedCouldCopy = INHERITED::onCanCopySurface(dst, src, srcRect, dstPoint); |
bool copied = false; |
- bool wouldNeedTempFBO = false; |
- if (can_copy_texsubimage(dst, src, this, &wouldNeedTempFBO) && |
- (!wouldNeedTempFBO || !inheritedCouldCopy)) { |
+ if (can_copy_texsubimage(dst, src, this)) { |
GrGLuint srcFBO; |
GrGLIRect srcVP; |
srcFBO = this->bindSurfaceAsFBO(src, GR_GL_FRAMEBUFFER, &srcVP); |
@@ -2441,8 +2438,7 @@ bool GrGpuGL::onCopySurface(GrSurface* dst, |
if (srcFBO) { |
GL_CALL(DeleteFramebuffers(1, &srcFBO)); |
} |
- } else if (can_blit_framebuffer(dst, src, this, &wouldNeedTempFBO) && |
- (!wouldNeedTempFBO || !inheritedCouldCopy)) { |
+ } else if (can_blit_framebuffer(dst, src, this)) { |
SkIRect dstRect = SkIRect::MakeXYWH(dstPoint.fX, dstPoint.fY, |
srcRect.width(), srcRect.height()); |
bool selfOverlap = false; |
@@ -2505,10 +2501,6 @@ bool GrGpuGL::onCopySurface(GrSurface* dst, |
copied = true; |
} |
} |
- if (!copied && inheritedCouldCopy) { |
- copied = INHERITED::onCopySurface(dst, src, srcRect, dstPoint); |
- SkASSERT(copied); |
- } |
return copied; |
} |
@@ -2516,11 +2508,13 @@ bool GrGpuGL::onCanCopySurface(GrSurface* dst, |
GrSurface* src, |
const SkIRect& srcRect, |
const SkIPoint& dstPoint) { |
- // This mirrors the logic in onCopySurface. |
- if (can_copy_texsubimage(dst, src, this)) { |
+ // This mirrors the logic in onCopySurface. We prefer our base makes the copy if we need to |
bsalomon
2014/10/31 19:43:01
Is this preference known to be valid?
|
+ // create a temp fbo |
+ bool wouldNeedTempFBO = false; |
+ if (can_copy_texsubimage(dst, src, this, &wouldNeedTempFBO) && !wouldNeedTempFBO) { |
return true; |
} |
- if (can_blit_framebuffer(dst, src, this)) { |
+ if (can_blit_framebuffer(dst, src, this, &wouldNeedTempFBO) && !wouldNeedTempFBO) { |
if (dst->surfacePriv().isSameAs(src)) { |
SkIRect dstRect = SkIRect::MakeXYWH(dstPoint.fX, dstPoint.fY, |
srcRect.width(), srcRect.height()); |
@@ -2531,7 +2525,7 @@ bool GrGpuGL::onCanCopySurface(GrSurface* dst, |
return true; |
} |
} |
- return INHERITED::onCanCopySurface(dst, src, srcRect, dstPoint); |
+ return false; |
} |
void GrGpuGL::didAddGpuTraceMarker() { |