use SkBlendMode
skbug.com/5814
Test: compile only
Change-Id: Ibbaff43df1117b2ca77fd8f917f03d88cc476330
(cherry picked from commit 26edbcba8a2ed4cb300e7f87e679e3b73cec2772)
diff --git a/libs/hwui/Glop.h b/libs/hwui/Glop.h
index b396e22..34c7934 100644
--- a/libs/hwui/Glop.h
+++ b/libs/hwui/Glop.h
@@ -25,7 +25,6 @@
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
-#include <SkXfermode.h>
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/GlopBuilder.cpp b/libs/hwui/GlopBuilder.cpp
index 3b5fc71..34e6d39 100644
--- a/libs/hwui/GlopBuilder.cpp
+++ b/libs/hwui/GlopBuilder.cpp
@@ -257,7 +257,7 @@
// If the blend mode cannot be implemented using shaders, fall
// back to the default SrcOver blend mode instead
if (CC_UNLIKELY(mCaches.extensions().hasFramebufferFetch())) {
- mDescription.framebufferMode = (SkXfermode::Mode)mode;
+ mDescription.framebufferMode = mode;
mDescription.swapSrcDst = (modeUsage == Blend::ModeOrderSwap::Swap);
// blending in shader, don't enable
} else {
@@ -271,11 +271,11 @@
if (colorFilter) {
SkColor color;
- SkXfermode::Mode xmode;
+ SkBlendMode bmode;
SkScalar srcColorMatrix[20];
- if (colorFilter->asColorMode(&color, &xmode)) {
+ if (colorFilter->asColorMode(&color, &bmode)) {
mOutGlop->fill.filterMode = mDescription.colorOp = ProgramDescription::ColorFilterMode::Blend;
- mDescription.colorMode = xmode;
+ mDescription.colorMode = bmode;
mOutGlop->fill.filter.color.set(color);
} else if (colorFilter->asColorMatrix(srcColorMatrix)) {
mOutGlop->fill.filterMode = mDescription.colorOp = ProgramDescription::ColorFilterMode::Matrix;
diff --git a/libs/hwui/Program.h b/libs/hwui/Program.h
index f5beb62..e410d71 100644
--- a/libs/hwui/Program.h
+++ b/libs/hwui/Program.h
@@ -22,7 +22,7 @@
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
-#include <SkXfermode.h>
+#include <SkBlendMode.h>
#include "Debug.h"
#include "FloatColor.h"
@@ -142,7 +142,7 @@
Gradient gradientType;
bool isSimpleGradient;
- SkXfermode::Mode shadersMode;
+ SkBlendMode shadersMode;
bool isBitmapFirst;
GLenum bitmapWrapS;
@@ -150,11 +150,11 @@
// Color operations
ColorFilterMode colorOp;
- SkXfermode::Mode colorMode;
+ SkBlendMode colorMode;
// Framebuffer blending (requires Extensions.hasFramebufferFetch())
- // Ignored for all values < SkXfermode::kPlus_Mode
- SkXfermode::Mode framebufferMode;
+ // Ignored for all values < SkBlendMode::kPlus
+ SkBlendMode framebufferMode;
bool swapSrcDst;
bool hasDebugHighlight;
@@ -186,16 +186,16 @@
gradientType = kGradientLinear;
isSimpleGradient = false;
- shadersMode = SkXfermode::kClear_Mode;
+ shadersMode = SkBlendMode::kClear;
isBitmapFirst = false;
bitmapWrapS = GL_CLAMP_TO_EDGE;
bitmapWrapT = GL_CLAMP_TO_EDGE;
colorOp = ColorFilterMode::None;
- colorMode = SkXfermode::kClear_Mode;
+ colorMode = SkBlendMode::kClear;
- framebufferMode = SkXfermode::kClear_Mode;
+ framebufferMode = SkBlendMode::kClear;
swapSrcDst = false;
hasDebugHighlight = false;
@@ -244,7 +244,7 @@
key |= programid(gradientType) << PROGRAM_GRADIENT_TYPE_SHIFT;
if (isBitmapFirst) key |= PROGRAM_KEY_BITMAP_FIRST;
if (hasBitmap && hasGradient) {
- key |= (shadersMode & PROGRAM_MAX_XFERMODE) << PROGRAM_XFERMODE_SHADER_SHIFT;
+ key |= ((int)shadersMode & PROGRAM_MAX_XFERMODE) << PROGRAM_XFERMODE_SHADER_SHIFT;
}
switch (colorOp) {
case ColorFilterMode::Matrix:
@@ -252,12 +252,12 @@
break;
case ColorFilterMode::Blend:
key |= PROGRAM_KEY_COLOR_BLEND;
- key |= (colorMode & PROGRAM_MAX_XFERMODE) << PROGRAM_XFERMODE_COLOR_OP_SHIFT;
+ key |= ((int)colorMode & PROGRAM_MAX_XFERMODE) << PROGRAM_XFERMODE_COLOR_OP_SHIFT;
break;
case ColorFilterMode::None:
break;
}
- key |= (framebufferMode & PROGRAM_MAX_XFERMODE) << PROGRAM_XFERMODE_FRAMEBUFFER_SHIFT;
+ key |= ((int)framebufferMode & PROGRAM_MAX_XFERMODE) << PROGRAM_XFERMODE_FRAMEBUFFER_SHIFT;
if (swapSrcDst) key |= PROGRAM_KEY_SWAP_SRC_DST;
if (modulate) key |= programid(0x1) << PROGRAM_MODULATE_SHIFT;
if (hasVertexAlpha) key |= programid(0x1) << PROGRAM_HAS_VERTEX_ALPHA_SHIFT;
diff --git a/libs/hwui/ProgramCache.cpp b/libs/hwui/ProgramCache.cpp
index 4ef6b85..1afc978 100644
--- a/libs/hwui/ProgramCache.cpp
+++ b/libs/hwui/ProgramCache.cpp
@@ -572,7 +572,7 @@
String8 ProgramCache::generateFragmentShader(const ProgramDescription& description) {
String8 shader(gFS_Header_Start);
- const bool blendFramebuffer = description.framebufferMode >= SkXfermode::kPlus_Mode;
+ const bool blendFramebuffer = description.framebufferMode >= SkBlendMode::kPlus;
if (blendFramebuffer) {
shader.append(gFS_Header_Extension_FramebufferFetch);
}
@@ -809,12 +809,12 @@
return shader;
}
-void ProgramCache::generateBlend(String8& shader, const char* name, SkXfermode::Mode mode) {
+void ProgramCache::generateBlend(String8& shader, const char* name, SkBlendMode mode) {
shader.append("\nvec4 ");
shader.append(name);
shader.append("(vec4 src, vec4 dst) {\n");
shader.append(" ");
- shader.append(gBlendOps[mode]);
+ shader.append(gBlendOps[(int)mode]);
shader.append("}\n");
}
diff --git a/libs/hwui/ProgramCache.h b/libs/hwui/ProgramCache.h
index 292ecdf..c2f715d 100644
--- a/libs/hwui/ProgramCache.h
+++ b/libs/hwui/ProgramCache.h
@@ -51,7 +51,7 @@
Program* generateProgram(const ProgramDescription& description, programid key);
String8 generateVertexShader(const ProgramDescription& description);
String8 generateFragmentShader(const ProgramDescription& description);
- void generateBlend(String8& shader, const char* name, SkXfermode::Mode mode);
+ void generateBlend(String8& shader, const char* name, SkBlendMode mode);
void generateTextureWrap(String8& shader, GLenum wrapS, GLenum wrapT);
void printLongString(const String8& shader) const;
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index b6ac48f..7c97e77 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -546,7 +546,7 @@
#endif
const int ptCount = vertexCount >> 1;
mCanvas->drawVertices(vertexMode, ptCount, (SkPoint*)verts, (SkPoint*)texs,
- (SkColor*)colors, NULL, indices, indexCount, paint);
+ (SkColor*)colors, indices, indexCount, paint);
}
// ----------------------------------------------------------------------------
@@ -670,7 +670,7 @@
tmpPaint.setShader(image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode));
mCanvas->drawVertices(SkCanvas::kTriangles_VertexMode, ptCount, (SkPoint*)vertices,
- texs, (const SkColor*)colors, NULL, indices,
+ texs, (const SkColor*)colors, indices,
indexCount, tmpPaint);
}
diff --git a/libs/hwui/SkiaCanvasProxy.cpp b/libs/hwui/SkiaCanvasProxy.cpp
index 863146e..f674086 100644
--- a/libs/hwui/SkiaCanvasProxy.cpp
+++ b/libs/hwui/SkiaCanvasProxy.cpp
@@ -140,8 +140,9 @@
}
void SkiaCanvasProxy::onDrawVertices(VertexMode mode, int vertexCount, const SkPoint vertices[],
- const SkPoint texs[], const SkColor colors[], SkXfermode*, const uint16_t indices[],
+ const SkPoint texs[], const SkColor colors[], SkBlendMode, const uint16_t indices[],
int indexCount, const SkPaint& paint) {
+ // TODO: should we pass through blendmode
if (mFilterHwuiCalls) {
return;
}
@@ -374,7 +375,7 @@
}
void SkiaCanvasProxy::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
- const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) {
+ const SkPoint texCoords[4], SkBlendMode bmode, const SkPaint& paint) {
if (mFilterHwuiCalls) {
return;
}
@@ -388,7 +389,7 @@
// If it fails to generate the vertices, then we do not draw.
if (SkPatchUtils::getVertexData(&data, cubics, colors, texCoords, lod.width(), lod.height())) {
this->drawVertices(SkCanvas::kTriangles_VertexMode, data.fVertexCount, data.fPoints,
- data.fTexCoords, data.fColors, xmode, data.fIndices, data.fIndexCount,
+ data.fTexCoords, data.fColors, bmode, data.fIndices, data.fIndexCount,
paint);
}
}
diff --git a/libs/hwui/SkiaCanvasProxy.h b/libs/hwui/SkiaCanvasProxy.h
index 3ee8c6e..0111815 100644
--- a/libs/hwui/SkiaCanvasProxy.h
+++ b/libs/hwui/SkiaCanvasProxy.h
@@ -67,7 +67,7 @@
virtual void onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
const SkRect& dst, const SkPaint*) override;
virtual void onDrawVertices(VertexMode, int vertexCount, const SkPoint vertices[],
- const SkPoint texs[], const SkColor colors[], SkXfermode*,
+ const SkPoint texs[], const SkColor colors[], SkBlendMode,
const uint16_t indices[], int indexCount,
const SkPaint&) override;
@@ -87,7 +87,7 @@
const SkPaint& paint) override;
virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
- const SkPoint texCoords[4], SkXfermode* xmode,
+ const SkPoint texCoords[4], SkBlendMode,
const SkPaint& paint) override;
virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override;
diff --git a/libs/hwui/SkiaShader.cpp b/libs/hwui/SkiaShader.cpp
index 489a306..971c2a3 100644
--- a/libs/hwui/SkiaShader.cpp
+++ b/libs/hwui/SkiaShader.cpp
@@ -309,10 +309,7 @@
storeCompose(caches, *rec.fShaderB, *rec.fShaderA,
transform, textureUnit, description, outData);
}
- if (!SkXfermode::AsMode(rec.fMode, &description->shadersMode)) {
- // TODO: Support other modes.
- description->shadersMode = SkXfermode::kSrcOver_Mode;
- }
+ description->shadersMode = rec.fBlendMode;
return true;
}
diff --git a/libs/hwui/SkiaShader.h b/libs/hwui/SkiaShader.h
index 5854289..d2f37cd 100644
--- a/libs/hwui/SkiaShader.h
+++ b/libs/hwui/SkiaShader.h
@@ -22,7 +22,6 @@
#include <GLES2/gl2.h>
#include <SkShader.h>
-#include <SkXfermode.h>
#include <cutils/compiler.h>
namespace android {
diff --git a/libs/hwui/tests/unit/RecordingCanvasTests.cpp b/libs/hwui/tests/unit/RecordingCanvasTests.cpp
index 134497c..dda432e 100644
--- a/libs/hwui/tests/unit/RecordingCanvasTests.cpp
+++ b/libs/hwui/tests/unit/RecordingCanvasTests.cpp
@@ -776,7 +776,7 @@
SkShader::TileMode::kRepeat_TileMode);
sk_sp<SkShader> composeShader = SkShader::MakeComposeShader(std::move(shader1), std::move(shader2),
- SkXfermode::kMultiply_Mode);
+ SkBlendMode::kMultiply);
paint.setShader(std::move(composeShader));
canvas.drawRoundRect(0, 0, 100, 100, 20.0f, 20.0f, paint);
});
diff --git a/libs/hwui/tests/unit/SkiaBehaviorTests.cpp b/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
index 49c4da6e..3f80d6e 100644
--- a/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
+++ b/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
@@ -69,10 +69,10 @@
SkColorMatrixFilter::MakeLightingFilter(0x11223344, 0));
SkColor observedColor;
- SkXfermode::Mode observedMode;
+ SkBlendMode observedMode;
ASSERT_TRUE(filter->asColorMode(&observedColor, &observedMode));
EXPECT_EQ(0xFF223344, observedColor);
- EXPECT_EQ(SkXfermode::Mode::kModulate_Mode, observedMode);
+ EXPECT_EQ(SkBlendMode::kModulate, observedMode);
}
{
diff --git a/libs/hwui/utils/PaintUtils.h b/libs/hwui/utils/PaintUtils.h
index 710e063..845a3ea 100644
--- a/libs/hwui/utils/PaintUtils.h
+++ b/libs/hwui/utils/PaintUtils.h
@@ -21,7 +21,6 @@
#include <SkColorFilter.h>
#include <SkDrawLooper.h>
#include <SkShader.h>
-#include <SkXfermode.h>
namespace android {
namespace uirenderer {