1 /*
2  * Copyright 2015 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 GrDrawAtlasOp_DEFINED
9 #define GrDrawAtlasOp_DEFINED
10 
11 #include "GrColor.h"
12 #include "GrDefaultGeoProcFactory.h"
13 #include "GrMeshDrawOp.h"
14 #include "GrSimpleMeshDrawOpHelper.h"
15 
16 class GrDrawAtlasOp final : public GrMeshDrawOp {
17 private:
18     using Helper = GrSimpleMeshDrawOpHelper;
19 
20 public:
21     DEFINE_OP_CLASS_ID
22 
Make(GrPaint && paint,const SkMatrix & viewMatrix,GrAAType aaType,int spriteCount,const SkRSXform * xforms,const SkRect * rects,const SkColor * colors)23     static std::unique_ptr<GrDrawOp> Make(GrPaint&& paint, const SkMatrix& viewMatrix,
24                                           GrAAType aaType, int spriteCount, const SkRSXform* xforms,
25                                           const SkRect* rects, const SkColor* colors) {
26         return Helper::FactoryHelper<GrDrawAtlasOp>(std::move(paint), viewMatrix, aaType,
27                                                     spriteCount, xforms, rects, colors);
28     }
29 
30     GrDrawAtlasOp(const Helper::MakeArgs& helperArgs, GrColor color, const SkMatrix& viewMatrix,
31                   GrAAType, int spriteCount, const SkRSXform* xforms, const SkRect* rects,
32                   const SkColor* colors);
33 
name()34     const char* name() const override { return "DrawAtlasOp"; }
35 
visitProxies(const VisitProxyFunc & func)36     void visitProxies(const VisitProxyFunc& func) const override {
37         fHelper.visitProxies(func);
38     }
39 
40     SkString dumpInfo() const override;
41 
42     FixedFunctionFlags fixedFunctionFlags() const override;
43 
44     RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
45                                 GrPixelConfigIsClamped dstIsClamped) override;
46 
47 private:
48     void onPrepareDraws(Target*) override;
49 
color()50     GrColor color() const { return fColor; }
viewMatrix()51     const SkMatrix& viewMatrix() const { return fViewMatrix; }
hasColors()52     bool hasColors() const { return fHasColors; }
quadCount()53     int quadCount() const { return fQuadCount; }
54 
55     bool onCombineIfPossible(GrOp* t, const GrCaps&) override;
56 
57     struct Geometry {
58         GrColor fColor;
59         SkTArray<uint8_t, true> fVerts;
60     };
61 
62     SkSTArray<1, Geometry, true> fGeoData;
63     Helper fHelper;
64     SkMatrix fViewMatrix;
65     GrColor fColor;
66     int fQuadCount;
67     bool fHasColors;
68 
69     typedef GrMeshDrawOp INHERITED;
70 };
71 
72 #endif
73