Loading libs/hwui/OpenGLRenderer.cpp +32 −34 Original line number Diff line number Diff line Loading @@ -74,7 +74,10 @@ static const Blender gBlends[] = { { SkXfermode::kDstOut_Mode, GL_ZERO, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kSrcATop_Mode, GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kDstATop_Mode, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA }, { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA } { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kPlus_Mode, GL_ONE, GL_ONE }, { SkXfermode::kMultiply_Mode, GL_ZERO, GL_SRC_COLOR }, { SkXfermode::kScreen_Mode, GL_ONE, GL_ONE_MINUS_SRC_COLOR } }; // This array contains the swapped version of each SkXfermode. For instance Loading @@ -92,7 +95,10 @@ static const Blender gBlendsSwap[] = { { SkXfermode::kDstOut_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ZERO }, { SkXfermode::kSrcATop_Mode, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA }, { SkXfermode::kDstATop_Mode, GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA } { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kPlus_Mode, GL_ONE, GL_ONE }, { SkXfermode::kMultiply_Mode, GL_DST_COLOR, GL_ZERO }, { SkXfermode::kScreen_Mode, GL_ONE_MINUS_DST_COLOR, GL_ONE } }; static const GLenum gTextureUnits[] = { Loading Loading @@ -2489,7 +2495,7 @@ void OpenGLRenderer::chooseBlending(bool blend, SkXfermode::Mode mode, ProgramDescription& description, bool swapSrcDst) { blend = blend || mode != SkXfermode::kSrcOver_Mode; if (blend) { if (mode < SkXfermode::kPlus_Mode) { if (mode <= SkXfermode::kScreen_Mode) { if (!mCaches.blend) { glEnable(GL_BLEND); } Loading Loading @@ -2542,15 +2548,7 @@ void OpenGLRenderer::resetDrawTextureTexCoords(float u1, float v1, float u2, flo void OpenGLRenderer::getAlphaAndMode(SkPaint* paint, int* alpha, SkXfermode::Mode* mode) { if (paint) { if (!mCaches.extensions.hasFramebufferFetch()) { const bool isMode = SkXfermode::IsMode(paint->getXfermode(), mode); if (!isMode) { // Assume SRC_OVER *mode = SkXfermode::kSrcOver_Mode; } } else { *mode = getXfermode(paint->getXfermode()); } // Skia draws using the color's alpha channel if < 255 // Otherwise, it uses the paint's alpha Loading Loading
libs/hwui/OpenGLRenderer.cpp +32 −34 Original line number Diff line number Diff line Loading @@ -74,7 +74,10 @@ static const Blender gBlends[] = { { SkXfermode::kDstOut_Mode, GL_ZERO, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kSrcATop_Mode, GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kDstATop_Mode, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA }, { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA } { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kPlus_Mode, GL_ONE, GL_ONE }, { SkXfermode::kMultiply_Mode, GL_ZERO, GL_SRC_COLOR }, { SkXfermode::kScreen_Mode, GL_ONE, GL_ONE_MINUS_SRC_COLOR } }; // This array contains the swapped version of each SkXfermode. For instance Loading @@ -92,7 +95,10 @@ static const Blender gBlendsSwap[] = { { SkXfermode::kDstOut_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ZERO }, { SkXfermode::kSrcATop_Mode, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA }, { SkXfermode::kDstATop_Mode, GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA } { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kPlus_Mode, GL_ONE, GL_ONE }, { SkXfermode::kMultiply_Mode, GL_DST_COLOR, GL_ZERO }, { SkXfermode::kScreen_Mode, GL_ONE_MINUS_DST_COLOR, GL_ONE } }; static const GLenum gTextureUnits[] = { Loading Loading @@ -2489,7 +2495,7 @@ void OpenGLRenderer::chooseBlending(bool blend, SkXfermode::Mode mode, ProgramDescription& description, bool swapSrcDst) { blend = blend || mode != SkXfermode::kSrcOver_Mode; if (blend) { if (mode < SkXfermode::kPlus_Mode) { if (mode <= SkXfermode::kScreen_Mode) { if (!mCaches.blend) { glEnable(GL_BLEND); } Loading Loading @@ -2542,15 +2548,7 @@ void OpenGLRenderer::resetDrawTextureTexCoords(float u1, float v1, float u2, flo void OpenGLRenderer::getAlphaAndMode(SkPaint* paint, int* alpha, SkXfermode::Mode* mode) { if (paint) { if (!mCaches.extensions.hasFramebufferFetch()) { const bool isMode = SkXfermode::IsMode(paint->getXfermode(), mode); if (!isMode) { // Assume SRC_OVER *mode = SkXfermode::kSrcOver_Mode; } } else { *mode = getXfermode(paint->getXfermode()); } // Skia draws using the color's alpha channel if < 255 // Otherwise, it uses the paint's alpha Loading