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