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 14class GrGLBitmapTextGeoProc; 15class 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 (GrTextureParams). The input 20 * coords are a custom attribute. 21 */ 22class GrBitmapTextGeoProc : public GrGeometryProcessor { 23public: 24 static GrGeometryProcessor* Create(GrColor color, GrTexture* tex, const GrTextureParams& p, 25 GrMaskFormat format, const SkMatrix& localMatrix, 26 bool usesLocalCoords) { 27 return new GrBitmapTextGeoProc(color, tex, p, format, localMatrix, usesLocalCoords); 28 } 29 30 virtual ~GrBitmapTextGeoProc() {} 31 32 const char* name() const override { return "Texture"; } 33 34 const Attribute* inPosition() const { return fInPosition; } 35 const Attribute* inColor() const { return fInColor; } 36 const Attribute* inTextureCoords() const { return fInTextureCoords; } 37 GrMaskFormat maskFormat() const { return fMaskFormat; } 38 GrColor color() const { return fColor; } 39 bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } 40 bool hasVertexColor() const { return SkToBool(fInColor); } 41 const SkMatrix& localMatrix() const { return fLocalMatrix; } 42 bool usesLocalCoords() const { return fUsesLocalCoords; } 43 44 void getGLSLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) const override; 45 46 GrGLSLPrimitiveProcessor* createGLSLInstance(const GrGLSLCaps& caps) const override; 47 48private: 49 GrBitmapTextGeoProc(GrColor, GrTexture* texture, const GrTextureParams& params, 50 GrMaskFormat format, const SkMatrix& localMatrix, bool usesLocalCoords); 51 52 GrColor fColor; 53 SkMatrix fLocalMatrix; 54 bool fUsesLocalCoords; 55 GrTextureAccess fTextureAccess; 56 const Attribute* fInPosition; 57 const Attribute* fInColor; 58 const Attribute* fInTextureCoords; 59 GrMaskFormat fMaskFormat; 60 61 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 62 63 typedef GrGeometryProcessor INHERITED; 64}; 65 66#endif 67