• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
15 class GrDrawAtlasOp final : public GrMeshDrawOp {
16 public:
17     DEFINE_OP_CLASS_ID
18 
Make(GrColor color,const SkMatrix & viewMatrix,int spriteCount,const SkRSXform * xforms,const SkRect * rects,const SkColor * colors)19     static std::unique_ptr<GrMeshDrawOp> Make(GrColor color, const SkMatrix& viewMatrix,
20                                               int spriteCount, const SkRSXform* xforms,
21                                               const SkRect* rects, const SkColor* colors) {
22         return std::unique_ptr<GrMeshDrawOp>(
23                 new GrDrawAtlasOp(color, viewMatrix, spriteCount, xforms, rects, colors));
24     }
25 
name()26     const char* name() const override { return "DrawAtlasOp"; }
27 
dumpInfo()28     SkString dumpInfo() const override {
29         SkString string;
30         for (const auto& geo : fGeoData) {
31             string.appendf("Color: 0x%08x, Quads: %d\n", geo.fColor, geo.fVerts.count() / 4);
32         }
33         string.append(DumpPipelineInfo(*this->pipeline()));
34         string.append(INHERITED::dumpInfo());
35         return string;
36     }
37 
38 private:
39     GrDrawAtlasOp(GrColor color, const SkMatrix& viewMatrix, int spriteCount,
40                   const SkRSXform* xforms, const SkRect* rects, const SkColor* colors);
41 
getFragmentProcessorAnalysisInputs(GrPipelineAnalysisColor * color,GrPipelineAnalysisCoverage * coverage)42     void getFragmentProcessorAnalysisInputs(GrPipelineAnalysisColor* color,
43                                             GrPipelineAnalysisCoverage* coverage) const override {
44         if (this->hasColors()) {
45             color->setToUnknown();
46         } else {
47             color->setToConstant(fGeoData[0].fColor);
48         }
49         *coverage = GrPipelineAnalysisCoverage::kNone;
50     }
51 
52     void onPrepareDraws(Target*) const override;
53 
54     void applyPipelineOptimizations(const GrPipelineOptimizations&) override;
55 
color()56     GrColor color() const { return fColor; }
viewMatrix()57     const SkMatrix& viewMatrix() const { return fViewMatrix; }
hasColors()58     bool hasColors() const { return fHasColors; }
quadCount()59     int quadCount() const { return fQuadCount; }
60 
61     bool onCombineIfPossible(GrOp* t, const GrCaps&) override;
62 
63     struct Geometry {
64         GrColor fColor;
65         SkTArray<uint8_t, true> fVerts;
66     };
67 
68     SkSTArray<1, Geometry, true> fGeoData;
69 
70     SkMatrix fViewMatrix;
71     GrColor fColor;
72     int fQuadCount;
73     bool fHasColors;
74 
75     typedef GrMeshDrawOp INHERITED;
76 };
77 
78 #endif
79