| OLD | NEW | 
|    1 /* |    1 /* | 
|    2 * Copyright 2015 Google Inc. |    2 * Copyright 2015 Google Inc. | 
|    3 * |    3 * | 
|    4 * Use of this source code is governed by a BSD-style license that can be |    4 * Use of this source code is governed by a BSD-style license that can be | 
|    5 * found in the LICENSE file. |    5 * found in the LICENSE file. | 
|    6 */ |    6 */ | 
|    7  |    7  | 
|    8 #include "effects/GrXfermodeFragmentProcessor.h" |    8 #include "effects/GrXfermodeFragmentProcessor.h" | 
|    9  |    9  | 
|   10 #include "GrFragmentProcessor.h" |   10 #include "GrFragmentProcessor.h" | 
|   11 #include "effects/GrConstColorProcessor.h" |   11 #include "effects/GrConstColorProcessor.h" | 
|   12 #include "gl/GrGLFragmentProcessor.h" |   12 #include "gl/GrGLFragmentProcessor.h" | 
|   13 #include "gl/GrGLSLBlend.h" |   13 #include "gl/GrGLSLBlend.h" | 
|   14 #include "gl/builders/GrGLProgramBuilder.h" |   14 #include "glsl/GrGLSLFragmentShaderBuilder.h" | 
 |   15 #include "glsl/GrGLSLProgramBuilder.h" | 
|   15 #include "SkGrPriv.h" |   16 #include "SkGrPriv.h" | 
|   16  |   17  | 
|   17 class ComposeTwoFragmentProcessor : public GrFragmentProcessor { |   18 class ComposeTwoFragmentProcessor : public GrFragmentProcessor { | 
|   18 public: |   19 public: | 
|   19     ComposeTwoFragmentProcessor(const GrFragmentProcessor* src, const GrFragment
     Processor* dst, |   20     ComposeTwoFragmentProcessor(const GrFragmentProcessor* src, const GrFragment
     Processor* dst, | 
|   20                     SkXfermode::Mode mode) |   21                     SkXfermode::Mode mode) | 
|   21         : fMode(mode) { |   22         : fMode(mode) { | 
|   22         this->initClassID<ComposeTwoFragmentProcessor>(); |   23         this->initClassID<ComposeTwoFragmentProcessor>(); | 
|   23         SkDEBUGCODE(int shaderAChildIndex = )this->registerChildProcessor(src); |   24         SkDEBUGCODE(int shaderAChildIndex = )this->registerChildProcessor(src); | 
|   24         SkDEBUGCODE(int shaderBChildIndex = )this->registerChildProcessor(dst); |   25         SkDEBUGCODE(int shaderBChildIndex = )this->registerChildProcessor(dst); | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   81 } |   82 } | 
|   82  |   83  | 
|   83 GrGLFragmentProcessor* ComposeTwoFragmentProcessor::onCreateGLInstance() const{ |   84 GrGLFragmentProcessor* ComposeTwoFragmentProcessor::onCreateGLInstance() const{ | 
|   84     return new GLComposeTwoFragmentProcessor(*this); |   85     return new GLComposeTwoFragmentProcessor(*this); | 
|   85 } |   86 } | 
|   86  |   87  | 
|   87 ///////////////////////////////////////////////////////////////////// |   88 ///////////////////////////////////////////////////////////////////// | 
|   88  |   89  | 
|   89 void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) { |   90 void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) { | 
|   90  |   91  | 
|   91     GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); |   92     GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder()
     ; | 
|   92     const ComposeTwoFragmentProcessor& cs = args.fFp.cast<ComposeTwoFragmentProc
     essor>(); |   93     const ComposeTwoFragmentProcessor& cs = args.fFp.cast<ComposeTwoFragmentProc
     essor>(); | 
|   93  |   94  | 
|   94     const char* inputColor = nullptr; |   95     const char* inputColor = nullptr; | 
|   95     if (args.fInputColor) { |   96     if (args.fInputColor) { | 
|   96         inputColor = "inputColor"; |   97         inputColor = "inputColor"; | 
|   97         fsBuilder->codeAppendf("vec4 inputColor = vec4(%s.rgb, 1.0);", args.fInp
     utColor); |   98         fsBuilder->codeAppendf("vec4 inputColor = vec4(%s.rgb, 1.0);", args.fInp
     utColor); | 
|   98     } |   99     } | 
|   99  |  100  | 
|  100     // declare outputColor and emit the code for each of the two children |  101     // declare outputColor and emit the code for each of the two children | 
|  101     SkString srcColor("src"); |  102     SkString srcColor("src"); | 
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  211     typedef GrFragmentProcessor INHERITED; |  212     typedef GrFragmentProcessor INHERITED; | 
|  212 }; |  213 }; | 
|  213  |  214  | 
|  214 ////////////////////////////////////////////////////////////////////////////// |  215 ////////////////////////////////////////////////////////////////////////////// | 
|  215  |  216  | 
|  216 class GLComposeOneFragmentProcessor : public GrGLFragmentProcessor { |  217 class GLComposeOneFragmentProcessor : public GrGLFragmentProcessor { | 
|  217 public: |  218 public: | 
|  218     GLComposeOneFragmentProcessor(const GrProcessor& processor) {} |  219     GLComposeOneFragmentProcessor(const GrProcessor& processor) {} | 
|  219  |  220  | 
|  220     void emitCode(EmitArgs& args) override { |  221     void emitCode(EmitArgs& args) override { | 
|  221         GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder
     (); |  222         GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuild
     er(); | 
|  222         SkXfermode::Mode mode = args.fFp.cast<ComposeOneFragmentProcessor>().mod
     e(); |  223         SkXfermode::Mode mode = args.fFp.cast<ComposeOneFragmentProcessor>().mod
     e(); | 
|  223         ComposeOneFragmentProcessor::Child child = |  224         ComposeOneFragmentProcessor::Child child = | 
|  224             args.fFp.cast<ComposeOneFragmentProcessor>().child(); |  225             args.fFp.cast<ComposeOneFragmentProcessor>().child(); | 
|  225         SkString childColor("child"); |  226         SkString childColor("child"); | 
|  226         this->emitChild(0, nullptr, &childColor, args); |  227         this->emitChild(0, nullptr, &childColor, args); | 
|  227  |  228  | 
|  228         const char* inputColor = args.fInputColor; |  229         const char* inputColor = args.fInputColor; | 
|  229         // We don't try to optimize for this case at all |  230         // We don't try to optimize for this case at all | 
|  230         if (!inputColor) { |  231         if (!inputColor) { | 
|  231             fsBuilder->codeAppendf("const vec4 ones = vec4(1);"); |  232             fsBuilder->codeAppendf("const vec4 ones = vec4(1);"); | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  289         case SkXfermode::kClear_Mode: |  290         case SkXfermode::kClear_Mode: | 
|  290             return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, |  291             return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, | 
|  291                                                  GrConstColorProcessor::kIgnore_
     InputMode); |  292                                                  GrConstColorProcessor::kIgnore_
     InputMode); | 
|  292         case SkXfermode::kDst_Mode: |  293         case SkXfermode::kDst_Mode: | 
|  293             return nullptr; |  294             return nullptr; | 
|  294         default: |  295         default: | 
|  295             return new ComposeOneFragmentProcessor(src, mode, |  296             return new ComposeOneFragmentProcessor(src, mode, | 
|  296                                                    ComposeOneFragmentProcessor::
     kSrc_Child); |  297                                                    ComposeOneFragmentProcessor::
     kSrc_Child); | 
|  297     } |  298     } | 
|  298 } |  299 } | 
| OLD | NEW |