/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrShadowGeoProc_DEFINED #define GrShadowGeoProc_DEFINED #include "GrProcessor.h" #include "GrGeometryProcessor.h" class GrGLRRectShadowGeoProc; /** * The output color of this effect is a coverage mask for a rrect shadow, * assuming circular corner geometry. */ class GrRRectShadowGeoProc : public GrGeometryProcessor { public: static sk_sp Make() { return sk_sp(new GrRRectShadowGeoProc()); } const char* name() const override { return "RRectShadow"; } const Attribute& inPosition() const { return kInPosition; } const Attribute& inColor() const { return kInColor; } const Attribute& inShadowParams() const { return kInShadowParams; } GrColor color() const { return fColor; } void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override {} GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: GrRRectShadowGeoProc(); const Attribute& onVertexAttribute(int i) const override { return IthAttribute(i, kInPosition, kInColor, kInShadowParams); } GrColor fColor; static constexpr Attribute kInPosition = {"inPosition", kFloat2_GrVertexAttribType}; static constexpr Attribute kInColor = {"inColor", kUByte4_norm_GrVertexAttribType}; static constexpr Attribute kInShadowParams = {"inShadowParams", kHalf4_GrVertexAttribType}; GR_DECLARE_GEOMETRY_PROCESSOR_TEST typedef GrGeometryProcessor INHERITED; }; #endif