Home | History | Annotate | Download | only in ops
      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 
     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 
     34     const char* name() const override { return "DrawAtlasOp"; }
     35 
     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 
     50     GrColor color() const { return fColor; }
     51     const SkMatrix& viewMatrix() const { return fViewMatrix; }
     52     bool hasColors() const { return fHasColors; }
     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