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
This commit is contained in:
@@ -63,7 +63,7 @@ struct Blender {
|
||||
// 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 @@ static const Blender gBlends[] = {
|
||||
// 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 },
|
||||
|
||||
Reference in New Issue
Block a user