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