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,
26                                       const SkMatrix& localMatrix) {
27        return SkNEW_ARGS(GrBitmapTextGeoProc, (color, tex, p, format, localMatrix));
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    const SkMatrix& localMatrix() const { return fLocalMatrix; }
40
41    virtual void getGLProcessorKey(const GrBatchTracker& bt,
42                                   const GrGLSLCaps& caps,
43                                   GrProcessorKeyBuilder* b) const override;
44
45    virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
46                                                     const GrGLSLCaps& caps) const override;
47
48    void initBatchTracker(GrBatchTracker*, const GrPipelineInfo&) const override;
49
50private:
51    GrBitmapTextGeoProc(GrColor, GrTexture* texture, const GrTextureParams& params,
52                        GrMaskFormat format, const SkMatrix& localMatrix);
53
54    GrColor          fColor;
55    SkMatrix         fLocalMatrix;
56    GrTextureAccess  fTextureAccess;
57    const Attribute* fInPosition;
58    const Attribute* fInColor;
59    const Attribute* fInTextureCoords;
60    GrMaskFormat     fMaskFormat;
61
62    GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
63
64    typedef GrGeometryProcessor INHERITED;
65};
66
67#endif
68