diff options
| author | 2011-02-01 23:07:54 -0800 | |
|---|---|---|
| committer | 2011-02-01 23:07:54 -0800 | |
| commit | debeeef50408cf12f1041426e7438be266789a62 (patch) | |
| tree | 61f3c94f89020dfc92441e273e4d6df239e5dbb8 /libs/hwui/LayerRenderer.cpp | |
| parent | a42ee6994b59c02a745cb5d0f8ec257d01424753 (diff) | |
| parent | d51eaa64e3f2d9684b2dd18ebd67734f4e0e7801 (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.cpp | 17 |
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() { |