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

          Line data    Source code
       1             : /*
       2             :  * Copyright 2016 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 "GrShadowGeoProc.h"
       9             : 
      10             : #include "glsl/GrGLSLFragmentShaderBuilder.h"
      11             : #include "glsl/GrGLSLGeometryProcessor.h"
      12             : #include "glsl/GrGLSLUniformHandler.h"
      13             : #include "glsl/GrGLSLVarying.h"
      14             : #include "glsl/GrGLSLVertexShaderBuilder.h"
      15             : 
      16           0 : class GrGLSLRRectShadowGeoProc : public GrGLSLGeometryProcessor {
      17             : public:
      18           0 :     GrGLSLRRectShadowGeoProc() {}
      19             : 
      20           0 :     void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override {
      21           0 :         const GrRRectShadowGeoProc& rsgp = args.fGP.cast<GrRRectShadowGeoProc>();
      22           0 :         GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder;
      23           0 :         GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler;
      24           0 :         GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
      25           0 :         GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder;
      26             : 
      27             :         // emit attributes
      28           0 :         varyingHandler->emitAttributes(rsgp);
      29           0 :         fragBuilder->codeAppend("vec4 shadowParams;");
      30           0 :         varyingHandler->addPassThroughAttribute(rsgp.inShadowParams(), "shadowParams");
      31             : 
      32             :         // setup pass through color
      33           0 :         varyingHandler->addPassThroughAttribute(rsgp.inColor(), args.fOutputColor);
      34             : 
      35             :         // Setup position
      36           0 :         this->setupPosition(vertBuilder, gpArgs, rsgp.inPosition()->fName);
      37             : 
      38             :         // emit transforms
      39           0 :         this->emitTransforms(vertBuilder,
      40             :                              varyingHandler,
      41             :                              uniformHandler,
      42             :                              gpArgs->fPositionVar,
      43           0 :                              rsgp.inPosition()->fName,
      44             :                              rsgp.localMatrix(),
      45           0 :                              args.fFPCoordTransformHandler);
      46             : 
      47           0 :         fragBuilder->codeAppend("float d = length(shadowParams.xy);");
      48           0 :         fragBuilder->codeAppend("float distance = shadowParams.z * (1.0 - d);");
      49             : 
      50           0 :         fragBuilder->codeAppend("float radius = shadowParams.w;");
      51             :         
      52           0 :         fragBuilder->codeAppend("float factor = 1.0 - clamp(distance/radius, 0.0, 1.0);");
      53           0 :         fragBuilder->codeAppend("factor = exp(-factor * factor * 4.0) - 0.018;");
      54           0 :         fragBuilder->codeAppendf("%s = vec4(factor);",
      55           0 :                                  args.fOutputCoverage);
      56           0 :     }
      57             : 
      58           0 :     void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc,
      59             :                  FPCoordTransformIter&& transformIter) override {
      60           0 :         this->setTransformDataHelper(proc.cast<GrRRectShadowGeoProc>().localMatrix(),
      61           0 :                                      pdman, &transformIter);
      62           0 :     }
      63             : 
      64           0 :     static inline void GenKey(const GrGeometryProcessor& gp,
      65             :                               const GrShaderCaps&,
      66             :                               GrProcessorKeyBuilder* b) {
      67           0 :         const GrRRectShadowGeoProc& rsgp = gp.cast<GrRRectShadowGeoProc>();
      68             :         uint16_t key;
      69           0 :         key = rsgp.localMatrix().hasPerspective() ? 0x1 : 0x0;
      70           0 :         b->add32(key);
      71           0 :     }
      72             : 
      73             : private:
      74             :     typedef GrGLSLGeometryProcessor INHERITED;
      75             : };
      76             : 
      77             : ///////////////////////////////////////////////////////////////////////////////
      78             : 
      79           0 : GrRRectShadowGeoProc::GrRRectShadowGeoProc(const SkMatrix& localMatrix)
      80           0 :     : fLocalMatrix(localMatrix) {
      81             : 
      82           0 :     this->initClassID<GrRRectShadowGeoProc>();
      83           0 :     fInPosition = &this->addVertexAttrib("inPosition", kVec2f_GrVertexAttribType,
      84           0 :                                          kHigh_GrSLPrecision);
      85           0 :     fInColor = &this->addVertexAttrib("inColor", kVec4ub_GrVertexAttribType);
      86           0 :     fInShadowParams = &this->addVertexAttrib("inShadowParams", kVec4f_GrVertexAttribType);
      87           0 : }
      88             : 
      89           0 : void GrRRectShadowGeoProc::getGLSLProcessorKey(const GrShaderCaps& caps,
      90             :                                                GrProcessorKeyBuilder* b) const {
      91           0 :     GrGLSLRRectShadowGeoProc::GenKey(*this, caps, b);
      92           0 : }
      93             : 
      94           0 : GrGLSLPrimitiveProcessor* GrRRectShadowGeoProc::createGLSLInstance(const GrShaderCaps&) const {
      95           0 :     return new GrGLSLRRectShadowGeoProc();
      96             : }
      97             : 
      98             : ///////////////////////////////////////////////////////////////////////////////
      99             : 
     100             : GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrRRectShadowGeoProc);
     101             : 
     102             : #if GR_TEST_UTILS
     103           0 : sk_sp<GrGeometryProcessor> GrRRectShadowGeoProc::TestCreate(GrProcessorTestData* d) {
     104           0 :     return GrRRectShadowGeoProc::Make(GrTest::TestMatrix(d->fRandom));
     105             : }
     106             : #endif

Generated by: LCOV version 1.13