diff options
author | Chris Craik <ccraik@google.com> | 2013-03-27 19:47:59 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-03-27 19:47:59 +0000 |
commit | 9cd645121584bc167b3fab61b1ed89ddc4631365 (patch) | |
tree | 364cd6fecc6be3ea5192ce9cdfaa1f2fe9b4cc97 /libs/hwui/OpenGLRenderer.cpp | |
parent | 2e73f5b8b7c941e68fec2d763d9455a8d6190e25 (diff) | |
parent | 408eb12631376cbdc96803e918decf6ea804d346 (diff) | |
download | frameworks_base-9cd645121584bc167b3fab61b1ed89ddc4631365.zip frameworks_base-9cd645121584bc167b3fab61b1ed89ddc4631365.tar.gz frameworks_base-9cd645121584bc167b3fab61b1ed89ddc4631365.tar.bz2 |
Merge "Set ignore flag during deferred savelayer" into jb-mr2-dev
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 1c36a23..2903bcd 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -431,6 +431,8 @@ status_t OpenGLRenderer::invokeFunctors(Rect& dirty) { } status_t OpenGLRenderer::callDrawGLFunction(Functor* functor, Rect& dirty) { + if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone; + interrupt(); detachFunctor(functor); @@ -749,6 +751,17 @@ void OpenGLRenderer::calculateLayerBoundsAndClip(Rect& bounds, Rect& clip, bool } } +void OpenGLRenderer::updateSnapshotIgnoreForLayer(const Rect& bounds, const Rect& clip, + bool fboLayer, int alpha) { + if (bounds.isEmpty() || bounds.getWidth() > mCaches.maxTextureSize || + bounds.getHeight() > mCaches.maxTextureSize || + (fboLayer && clip.isEmpty())) { + mSnapshot->empty = fboLayer; + } else { + mSnapshot->invisible = mSnapshot->invisible || (alpha <= ALPHA_THRESHOLD && fboLayer); + } +} + int OpenGLRenderer::saveLayerDeferred(float left, float top, float right, float bottom, int alpha, SkXfermode::Mode mode, int flags) { const GLuint previousFbo = mSnapshot->fbo; @@ -762,8 +775,9 @@ int OpenGLRenderer::saveLayerDeferred(float left, float top, float right, float Rect bounds(left, top, right, bottom); Rect clip; calculateLayerBoundsAndClip(bounds, clip, true); + updateSnapshotIgnoreForLayer(bounds, clip, true, alpha); - if (!bounds.isEmpty() && !clip.isEmpty()) { + if (!mSnapshot->isIgnored()) { mSnapshot->resetTransform(-bounds.left, -bounds.top, 0.0f); mSnapshot->resetClip(clip.left, clip.top, clip.right, clip.bottom); } @@ -835,17 +849,10 @@ bool OpenGLRenderer::createLayer(float left, float top, float right, float botto Rect clip; Rect bounds(left, top, right, bottom); calculateLayerBoundsAndClip(bounds, clip, fboLayer); - - if (bounds.isEmpty() || bounds.getWidth() > mCaches.maxTextureSize || - bounds.getHeight() > mCaches.maxTextureSize || - (fboLayer && clip.isEmpty())) { - mSnapshot->empty = fboLayer; - } else { - mSnapshot->invisible = mSnapshot->invisible || (alpha <= ALPHA_THRESHOLD && fboLayer); - } + updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, alpha); // Bail out if we won't draw in this snapshot - if (mSnapshot->invisible || mSnapshot->empty) { + if (mSnapshot->isIgnored()) { return false; } |