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 #ifndef GrShadowGeoProc_DEFINED 9 #define GrShadowGeoProc_DEFINED 10 11 #include "src/core/SkArenaAlloc.h" 12 #include "src/gpu/GrGeometryProcessor.h" 13 #include "src/gpu/GrProcessor.h" 14 15 class GrGLRRectShadowGeoProc; 16 class GrSurfaceProxyView; 17 18 /** 19 * The output color of this effect is a coverage mask for a rrect shadow, 20 * assuming circular corner geometry. 21 */ 22 class GrRRectShadowGeoProc : public GrGeometryProcessor { 23 public: Make(SkArenaAlloc * arena,const GrSurfaceProxyView & lutView)24 static GrGeometryProcessor* Make(SkArenaAlloc* arena, const GrSurfaceProxyView& lutView) { 25 return arena->make<GrRRectShadowGeoProc>(lutView); 26 } 27 name()28 const char* name() const override { return "RRectShadow"; } 29 inPosition()30 const Attribute& inPosition() const { return fInPosition; } inColor()31 const Attribute& inColor() const { return fInColor; } inShadowParams()32 const Attribute& inShadowParams() const { return fInShadowParams; } color()33 GrColor color() const { return fColor; } 34 getGLSLProcessorKey(const GrShaderCaps & caps,GrProcessorKeyBuilder * b)35 void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override {} 36 37 GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; 38 39 private: 40 friend class ::SkArenaAlloc; // for access to ctor 41 42 GrRRectShadowGeoProc(const GrSurfaceProxyView& lutView); 43 onTextureSampler(int i)44 const TextureSampler& onTextureSampler(int i) const override { return fLUTTextureSampler; } 45 46 GrColor fColor; 47 TextureSampler fLUTTextureSampler; 48 49 Attribute fInPosition; 50 Attribute fInColor; 51 Attribute fInShadowParams; 52 53 GR_DECLARE_GEOMETRY_PROCESSOR_TEST 54 55 typedef GrGeometryProcessor INHERITED; 56 }; 57 58 #endif 59