summaryrefslogtreecommitdiff
path: root/libs/hwui/LayerRenderer.cpp
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2011-02-01 23:07:54 -0800
committer Android Git Automerger <android-git-automerger@android.com> 2011-02-01 23:07:54 -0800
commitdebeeef50408cf12f1041426e7438be266789a62 (patch)
tree61f3c94f89020dfc92441e273e4d6df239e5dbb8 /libs/hwui/LayerRenderer.cpp
parenta42ee6994b59c02a745cb5d0f8ec257d01424753 (diff)
parentd51eaa64e3f2d9684b2dd18ebd67734f4e0e7801 (diff)
am d51eaa64: Merge "Update layers based on the dirty region. Bug #3413433" into honeycomb
* commit 'd51eaa64e3f2d9684b2dd18ebd67734f4e0e7801': Update layers based on the dirty region. Bug #3413433
Diffstat (limited to 'libs/hwui/LayerRenderer.cpp')
-rw-r--r--libs/hwui/LayerRenderer.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index 691f6497f641..aebd2b7c696d 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -16,8 +16,11 @@
#define LOG_TAG "OpenGLRenderer"
+#include <ui/Rect.h>
+
#include "LayerRenderer.h"
#include "Properties.h"
+#include "Rect.h"
namespace android {
namespace uirenderer {
@@ -30,12 +33,24 @@ void LayerRenderer::prepareDirty(float left, float top, float right, float botto
LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->fbo);
#if RENDER_LAYERS_AS_REGIONS
- mLayer->region.clear();
+ Rect dirty(left, top, right, bottom);
+ if (dirty.isEmpty() || (dirty.left <= 0 && dirty.top <= 0 &&
+ dirty.right >= mLayer->width && dirty.bottom >= mLayer->height)) {
+ mLayer->region.clear();
+ dirty.set(0.0f, 0.0f, mLayer->width, mLayer->height);
+ } else {
+ android::Rect r(dirty.left, dirty.top, dirty.right, dirty.bottom);
+ mLayer->region.subtractSelf(r);
+ }
#endif
glBindFramebuffer(GL_FRAMEBUFFER, mLayer->fbo);
+#if RENDER_LAYERS_AS_REGIONS
+ OpenGLRenderer::prepareDirty(dirty.left, dirty.top, dirty.right, dirty.bottom, opaque);
+#else
OpenGLRenderer::prepareDirty(0.0f, 0.0f, mLayer->width, mLayer->height, opaque);
+#endif
}
void LayerRenderer::finish() {