From 6c5b9be7450903762f676522c32d65f7545730df Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Wed, 27 Feb 2013 14:03:19 -0800 Subject: Fix T-junctions in layers' generated meshes bug:4128442 Currently we fix T-junctions for hardware layers, and for Canvas.saveLayer if the transform isn't rectAsRect. Ideally, hardware layers should lazily re-generate T-junction free geometry if the transform becomes non-rectAsRect Depends on frameworks/native change: https://googleplex-android-review.googlesource.com/#/c/277668/ which adds Region::createTJunctionFreeRegion() Change-Id: Ice75b4a1a4459ff835059ea81d70f7d1563fd96d --- libs/hwui/OpenGLRenderer.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'libs/hwui/OpenGLRenderer.cpp') diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 34d1c983f87d..eec5f5fa1a80 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -1022,7 +1022,14 @@ void OpenGLRenderer::composeLayerRegion(Layer* layer, const Rect& rect) { // information about this implementation if (CC_LIKELY(!layer->region.isEmpty())) { size_t count; - const android::Rect* rects = layer->region.getArray(&count); + const android::Rect* rects; + Region safeRegion; + if (CC_LIKELY(hasRectToRectTransform())) { + rects = layer->region.getArray(&count); + } else { + safeRegion = Region::createTJunctionFreeRegion(layer->region); + rects = safeRegion.getArray(&count); + } const float alpha = layer->getAlpha() / 255.0f; const float texX = 1.0f / float(layer->getWidth()); -- cgit v1.2.3-59-g8ed1b