Don't perform glCopyTextImage with coordinates outside the buffer.
Bug #3122179
Change-Id: I91ed397e9e553a8eeb69d82d0c5b1e49a3cdd5ff
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 17ef598..38e153f 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -355,8 +355,16 @@
Rect bounds(left, top, right, bottom);
if (!fboLayer) {
mSnapshot->transform->mapRect(bounds);
+
// Layers only make sense if they are in the framebuffer's bounds
bounds.intersect(*mSnapshot->clipRect);
+
+ // When the layer is not an FBO, we may use glCopyTexImage so we
+ // need to make sure the layer does not extend outside the bounds
+ // of the framebuffer
+ bounds.intersect(snapshot->previous->viewport);
+
+ // We cannot work with sub-pixels in this case
bounds.snapToPixelBoundaries();
}