summaryrefslogtreecommitdiffstats
path: root/libs/hwui/OpenGLRenderer.cpp
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2013-03-27 19:47:59 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-03-27 19:47:59 +0000
commit9cd645121584bc167b3fab61b1ed89ddc4631365 (patch)
tree364cd6fecc6be3ea5192ce9cdfaa1f2fe9b4cc97 /libs/hwui/OpenGLRenderer.cpp
parent2e73f5b8b7c941e68fec2d763d9455a8d6190e25 (diff)
parent408eb12631376cbdc96803e918decf6ea804d346 (diff)
downloadframeworks_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.cpp27
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;
}