| Index: src/gpu/effects/GrPorterDuffXferProcessor.cpp
|
| diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
|
| index b6b57aefead08b0ccbcd477c73a6e28d53ad1f2c..0e1bc514698e214cdf5e1900f9c330609d0c9b42 100644
|
| --- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
|
| +++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
|
| @@ -13,6 +13,7 @@
|
| #include "GrProcOptInfo.h"
|
| #include "GrTypes.h"
|
| #include "GrXferProcessor.h"
|
| +#include "gl/GrGLBlend.h"
|
| #include "gl/GrGLXferProcessor.h"
|
| #include "gl/builders/GrGLFragmentShaderBuilder.h"
|
| #include "gl/builders/GrGLProgramBuilder.h"
|
| @@ -488,50 +489,6 @@ private:
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -static bool append_porterduff_term(GrGLXPFragmentBuilder* fsBuilder, SkXfermode::Coeff coeff,
|
| - const char* colorName, const char* srcColorName,
|
| - const char* dstColorName, bool hasPrevious) {
|
| - if (SkXfermode::kZero_Coeff == coeff) {
|
| - return hasPrevious;
|
| - } else {
|
| - if (hasPrevious) {
|
| - fsBuilder->codeAppend(" + ");
|
| - }
|
| - fsBuilder->codeAppendf("%s", colorName);
|
| - switch (coeff) {
|
| - case SkXfermode::kOne_Coeff:
|
| - break;
|
| - case SkXfermode::kSC_Coeff:
|
| - fsBuilder->codeAppendf(" * %s", srcColorName);
|
| - break;
|
| - case SkXfermode::kISC_Coeff:
|
| - fsBuilder->codeAppendf(" * (vec4(1.0) - %s)", srcColorName);
|
| - break;
|
| - case SkXfermode::kDC_Coeff:
|
| - fsBuilder->codeAppendf(" * %s", dstColorName);
|
| - break;
|
| - case SkXfermode::kIDC_Coeff:
|
| - fsBuilder->codeAppendf(" * (vec4(1.0) - %s)", dstColorName);
|
| - break;
|
| - case SkXfermode::kSA_Coeff:
|
| - fsBuilder->codeAppendf(" * %s.a", srcColorName);
|
| - break;
|
| - case SkXfermode::kISA_Coeff:
|
| - fsBuilder->codeAppendf(" * (1.0 - %s.a)", srcColorName);
|
| - break;
|
| - case SkXfermode::kDA_Coeff:
|
| - fsBuilder->codeAppendf(" * %s.a", dstColorName);
|
| - break;
|
| - case SkXfermode::kIDA_Coeff:
|
| - fsBuilder->codeAppendf(" * (1.0 - %s.a)", dstColorName);
|
| - break;
|
| - default:
|
| - SkFAIL("Unsupported Blend Coeff");
|
| - }
|
| - return true;
|
| - }
|
| -}
|
| -
|
| class GLShaderPDXferProcessor : public GrGLXferProcessor {
|
| public:
|
| static void GenKey(const GrProcessor& processor, GrProcessorKeyBuilder* b) {
|
| @@ -545,17 +502,7 @@ private:
|
| const ShaderPDXferProcessor& xp = proc.cast<ShaderPDXferProcessor>();
|
| GrGLXPFragmentBuilder* fsBuilder = pb->getFragmentShaderBuilder();
|
|
|
| - SkXfermode::Coeff srcCoeff, dstCoeff;
|
| - SkXfermode::ModeAsCoeff(xp.getXfermode(), &srcCoeff, &dstCoeff);
|
| -
|
| - fsBuilder->codeAppendf("%s =", outColor);
|
| - // append src blend
|
| - bool didAppend = append_porterduff_term(fsBuilder, srcCoeff, srcColor, srcColor, dstColor,
|
| - false);
|
| - // append dst blend
|
| - SkAssertResult(append_porterduff_term(fsBuilder, dstCoeff, dstColor, srcColor, dstColor,
|
| - didAppend));
|
| - fsBuilder->codeAppend(";");
|
| + GrGLBlend::AppendPorterDuffBlend(fsBuilder, srcColor, dstColor, outColor, xp.getXfermode());
|
| }
|
|
|
| void onSetData(const GrGLProgramDataManager&, const GrXferProcessor&) override {}
|
| @@ -824,4 +771,3 @@ void GrPorterDuffXPFactory::TestGetXPOutputTypes(const GrXferProcessor* xp,
|
| *outPrimary = blendFormula.fPrimaryOutputType;
|
| *outSecondary = blendFormula.fSecondaryOutputType;
|
| }
|
| -
|
|
|