HWUI: do not call glCopyTexSubImage2D on empty area.
Previous check .isEmpty() is not sufficient, because getWidth() may have
value 0.5, so technically it is not empty, but when this size is passed
to texture calls it is converted to uint_32 and it becomes zero.
bug:28941093
Change-Id: Ia7c2bf0340466d5376f235fb5da54ad2ddfa0a03
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp
index eed0126..ea2e15b 100644
--- a/libs/hwui/BakedOpRenderer.cpp
+++ b/libs/hwui/BakedOpRenderer.cpp
@@ -96,15 +96,15 @@
}
OffscreenBuffer* BakedOpRenderer::copyToLayer(const Rect& area) {
- OffscreenBuffer* buffer = mRenderState.layerPool().get(mRenderState,
- area.getWidth(), area.getHeight());
- if (!area.isEmpty()) {
+ const uint32_t width = area.getWidth();
+ const uint32_t height = area.getHeight();
+ OffscreenBuffer* buffer = mRenderState.layerPool().get(mRenderState, width, height);
+ if (!area.isEmpty() && width != 0 && height != 0) {
mCaches.textureState().activateTexture(0);
mCaches.textureState().bindTexture(buffer->texture.id());
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0,
- area.left, mRenderTarget.viewportHeight - area.bottom,
- area.getWidth(), area.getHeight());
+ area.left, mRenderTarget.viewportHeight - area.bottom, width, height);
}
return buffer;
}