DO NOT MERGE Correctly implement the CLEAR xfermode.

This bug is a regression from the software pipeline and prevents
applications from implementing an "eraser" type tool (for instance
a drawing/painting apps.) This issue affects external applications
when they turn on hardware acceleration.

The previous implementation was using glBlendFunc with the parameters
GL_ZERO/GL_ZERO which doesn't work for text, paths and other alpha
sources (anti-aliasing.) The correct implementation is GL_ZERO/
GL_ONE_MINUS_SRC_ALPHA.

Change-Id: I1446e83480e46174b880120069d76fcad14ba300
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index d9d7d231..ffcae1c6 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -63,7 +63,7 @@
 // In this array, the index of each Blender equals the value of the first
 // entry. For instance, gBlends[1] == gBlends[SkXfermode::kSrc_Mode]
 static const Blender gBlends[] = {
-    { SkXfermode::kClear_Mode,   GL_ZERO,                 GL_ZERO },
+    { SkXfermode::kClear_Mode,   GL_ZERO,                 GL_ONE_MINUS_SRC_ALPHA },
     { SkXfermode::kSrc_Mode,     GL_ONE,                  GL_ZERO },
     { SkXfermode::kDst_Mode,     GL_ZERO,                 GL_ONE },
     { SkXfermode::kSrcOver_Mode, GL_ONE,                  GL_ONE_MINUS_SRC_ALPHA },
@@ -81,7 +81,7 @@
 // this array's SrcOver blending mode is actually DstOver. You can refer to
 // createLayer() for more information on the purpose of this array.
 static const Blender gBlendsSwap[] = {
-    { SkXfermode::kClear_Mode,   GL_ZERO,                 GL_ZERO },
+    { SkXfermode::kClear_Mode,   GL_ONE_MINUS_DST_ALPHA,  GL_ZERO },
     { SkXfermode::kSrc_Mode,     GL_ZERO,                 GL_ONE },
     { SkXfermode::kDst_Mode,     GL_ONE,                  GL_ZERO },
     { SkXfermode::kSrcOver_Mode, GL_ONE_MINUS_DST_ALPHA,  GL_ONE },