LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/gpu/effects - GrBlurredEdgeFragmentProcessor.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 33 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 8 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2017 Google Inc.
       3             :  *
       4             :  * Use of this source code is governed by a BSD-style license that can be
       5             :  * found in the LICENSE file.
       6             :  */
       7             : 
       8             : #include "effects/GrBlurredEdgeFragmentProcessor.h"
       9             : 
      10             : #include "glsl/GrGLSLFragmentProcessor.h"
      11             : #include "glsl/GrGLSLFragmentShaderBuilder.h"
      12             : 
      13           0 : class GLSLBlurredEdgeFP : public GrGLSLFragmentProcessor {
      14             : public:
      15           0 :     GLSLBlurredEdgeFP() {}
      16             : 
      17           0 :     void emitCode(EmitArgs& args) override {
      18             : 
      19           0 :         GrBlurredEdgeFP::Mode mode = args.fFp.cast<GrBlurredEdgeFP>().mode();
      20             : 
      21           0 :         GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
      22             : 
      23           0 :         fragBuilder->codeAppendf("vec4 color = %s;", args.fInputColor);
      24           0 :         if (!args.fGpImplementsDistanceVector) {
      25           0 :             fragBuilder->codeAppendf("// assuming interpolant is set in vertex colors\n");
      26           0 :             fragBuilder->codeAppendf("float factor = 1.0 - color.b;");
      27             :         } else {
      28           0 :             fragBuilder->codeAppendf("// using distance to edge to compute interpolant\n");
      29           0 :             fragBuilder->codeAppend("float radius = color.r*256.0*64.0 + color.g*64.0;");
      30           0 :             fragBuilder->codeAppend("float pad = color.b*64.0;");
      31             : 
      32           0 :             fragBuilder->codeAppendf("float factor = 1.0 - clamp((%s.z - pad)/radius, 0.0, 1.0);",
      33           0 :                                      fragBuilder->distanceVectorName());
      34             :         }
      35           0 :         switch (mode) {
      36             :             case GrBlurredEdgeFP::kGaussian_Mode:
      37           0 :                 fragBuilder->codeAppend("factor = exp(-factor * factor * 4.0) - 0.018;");
      38           0 :                 break;
      39             :             case GrBlurredEdgeFP::kSmoothstep_Mode:
      40           0 :                 fragBuilder->codeAppend("factor = smoothstep(factor, 0.0, 1.0);");
      41           0 :                 break;
      42             :         }
      43           0 :         if (!args.fGpImplementsDistanceVector) {
      44           0 :             fragBuilder->codeAppendf("%s = vec4(factor*color.g);", args.fOutputColor);
      45             :         } else {
      46           0 :             fragBuilder->codeAppendf("%s = vec4(factor*color.a);", args.fOutputColor);
      47             :         }
      48           0 :     }
      49             : 
      50             : protected:
      51           0 :     void onSetData(const GrGLSLProgramDataManager& pdman,
      52           0 :                    const GrFragmentProcessor& proc) override {}
      53             : 
      54             :     GrBlurredEdgeFP::Mode fMode;
      55             : };
      56             : 
      57           0 : GrGLSLFragmentProcessor* GrBlurredEdgeFP::onCreateGLSLInstance() const {
      58           0 :     return new GLSLBlurredEdgeFP();
      59             : }
      60             : 
      61           0 : void GrBlurredEdgeFP::onGetGLSLProcessorKey(const GrShaderCaps& caps, 
      62             :                                             GrProcessorKeyBuilder* b) const {
      63           0 :     b->add32(fMode);
      64           0 : }
      65             : 
      66           0 : bool GrBlurredEdgeFP::onIsEqual(const GrFragmentProcessor& other) const {
      67           0 :     const GrBlurredEdgeFP& that = other.cast<GrBlurredEdgeFP>();
      68           0 :     return that.fMode == fMode;
      69             : }
      70             : 
      71             : 

Generated by: LCOV version 1.13