Merge "Don't clobber the local dirty rect after rendering a layer. Bug #3417254 Bug #3413433" into honeycomb
This commit is contained in:
@@ -547,7 +547,7 @@ public abstract class HardwareRenderer {
|
||||
}
|
||||
|
||||
onPreDraw(dirty);
|
||||
|
||||
|
||||
HardwareCanvas canvas = mCanvas;
|
||||
attachInfo.mHardwareCanvas = canvas;
|
||||
|
||||
|
||||
@@ -8221,8 +8221,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
|
||||
if (mHardwareLayer == null) {
|
||||
mHardwareLayer = mAttachInfo.mHardwareRenderer.createHardwareLayer(
|
||||
width, height, isOpaque());
|
||||
mLocalDirtyRect.setEmpty();
|
||||
} else if (mHardwareLayer.getWidth() != width || mHardwareLayer.getHeight() != height) {
|
||||
mHardwareLayer.resize(width, height);
|
||||
mLocalDirtyRect.setEmpty();
|
||||
}
|
||||
|
||||
Canvas currentCanvas = mAttachInfo.mHardwareCanvas;
|
||||
@@ -8231,6 +8233,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
|
||||
try {
|
||||
canvas.setViewport(width, height);
|
||||
canvas.onPreDraw(mLocalDirtyRect);
|
||||
mLocalDirtyRect.setEmpty();
|
||||
|
||||
final int restoreCount = canvas.save();
|
||||
|
||||
@@ -8252,7 +8255,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
|
||||
canvas.onPostDraw();
|
||||
mHardwareLayer.end(currentCanvas);
|
||||
mAttachInfo.mHardwareCanvas = currentCanvas;
|
||||
mLocalDirtyRect.setEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@ namespace uirenderer {
|
||||
void LayerRenderer::prepareDirty(float left, float top, float right, float bottom, bool opaque) {
|
||||
LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->fbo);
|
||||
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, mLayer->fbo);
|
||||
|
||||
#if RENDER_LAYERS_AS_REGIONS
|
||||
Rect dirty(left, top, right, bottom);
|
||||
if (dirty.isEmpty() || (dirty.left <= 0 && dirty.top <= 0 &&
|
||||
@@ -43,11 +45,7 @@ void LayerRenderer::prepareDirty(float left, float top, float right, float botto
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user