Home | History | Annotate | Download | only in effects
      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 
     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 
     35     ~GrBitmapTextGeoProc() override {}
     36 
     37     const char* name() const override { return "Texture"; }
     38 
     39     const Attribute* inPosition() const { return fInPosition; }
     40     const Attribute* inColor() const { return fInColor; }
     41     const Attribute* inTextureCoords() const { return fInTextureCoords; }
     42     GrMaskFormat maskFormat() const { return fMaskFormat; }
     43     GrColor color() const { return fColor; }
     44     bool hasVertexColor() const { return SkToBool(fInColor); }
     45     const SkMatrix& localMatrix() const { return fLocalMatrix; }
     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