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; |
} |
- |