Chromium Code Reviews| Index: src/gpu/effects/GrPorterDuffXferProcessor.cpp |
| diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp |
| index b6b57aefead08b0ccbcd477c73a6e28d53ad1f2c..91d01638dd92b5e4d59fc5ad71db0a343986b326 100644 |
| --- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp |
| +++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp |
| @@ -16,6 +16,7 @@ |
| #include "gl/GrGLXferProcessor.h" |
| #include "gl/builders/GrGLFragmentShaderBuilder.h" |
| #include "gl/builders/GrGLProgramBuilder.h" |
| +#include "gl/GrGLBlend.h" |
|
egdaniel
2015/07/24 18:14:29
move this to above gl/GrGLXferProcessor.h
wangyix
2015/07/24 20:18:15
Done.
|
| /** |
| * Wraps the shader outputs and HW blend state that comprise a Porter Duff blend mode with coverage. |
| @@ -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; |
| } |
| - |