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