1 /* 2 * Copyright 2013 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 GrBitmapTextGeoProc_DEFINED 9 #define GrBitmapTextGeoProc_DEFINED 10 11 #include "GrProcessor.h" 12 #include "GrGeometryProcessor.h" 13 14 class GrGLBitmapTextGeoProc; 15 class GrInvariantOutput; 16 17 /** 18 * The output color of this effect is a modulation of the input color and a sample from a texture. 19 * It allows explicit specification of the filtering and wrap modes (GrSamplerState). The input 20 * coords are a custom attribute. 21 */ 22 class GrBitmapTextGeoProc : public GrGeometryProcessor { 23 public: 24 Make(GrColor color,const sk_sp<GrTextureProxy> * proxies,int numProxies,const GrSamplerState & p,GrMaskFormat format,const SkMatrix & localMatrix,bool usesLocalCoords)25 static sk_sp<GrGeometryProcessor> Make(GrColor color, 26 const sk_sp<GrTextureProxy>* proxies, 27 int numProxies, 28 const GrSamplerState& p, GrMaskFormat format, 29 const SkMatrix& localMatrix, bool usesLocalCoords) { 30 return sk_sp<GrGeometryProcessor>( 31 new GrBitmapTextGeoProc(color, proxies, numProxies, p, format, 32 localMatrix, usesLocalCoords)); 33 } 34 ~GrBitmapTextGeoProc()35 ~GrBitmapTextGeoProc() override {} 36 name()37 const char* name() const override { return "Texture"; } 38 inPosition()39 const Attribute* inPosition() const { return fInPosition; } inColor()40 const Attribute* inColor() const { return fInColor; } inTextureCoords()41 const Attribute* inTextureCoords() const { return fInTextureCoords; } maskFormat()42 GrMaskFormat maskFormat() const { return fMaskFormat; } color()43 GrColor color() const { return fColor; } hasVertexColor()44 bool hasVertexColor() const { return SkToBool(fInColor); } localMatrix()45 const SkMatrix& localMatrix() const { return fLocalMatrix; } usesLocalCoords()46 bool usesLocalCoords() const { return fUsesLocalCoords; } 47 48 void addNewProxies(const sk_sp<GrTextureProxy>* proxies, int numProxies, const GrSamplerState&); 49 50 void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override; 51 52 GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps& caps) const override; 53 54 private: 55 static constexpr int kMaxTextures = 4; 56 57 GrBitmapTextGeoProc(GrColor, const sk_sp<GrTextureProxy>* proxies, int numProxies, 58 const GrSamplerState& params, GrMaskFormat format, 59 const SkMatrix& localMatrix, bool usesLocalCoords); 60 61 GrColor fColor; 62 SkMatrix fLocalMatrix; 63 bool fUsesLocalCoords; 64 TextureSampler fTextureSamplers[kMaxTextures]; 65 const Attribute* fInPosition; 66 const Attribute* fInColor; 67 const Attribute* fInTextureCoords; 68 GrMaskFormat fMaskFormat; 69 70 GR_DECLARE_GEOMETRY_PROCESSOR_TEST 71 72 typedef GrGeometryProcessor INHERITED; 73 }; 74 75 #endif 76