• Home
  • 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 GrStencilPathOp_DEFINED
9 #define GrStencilPathOp_DEFINED
10 
11 #include "GrGpu.h"
12 #include "GrOp.h"
13 #include "GrOpFlushState.h"
14 #include "GrPath.h"
15 #include "GrPathRendering.h"
16 #include "GrRenderTarget.h"
17 #include "GrStencilSettings.h"
18 
19 class GrStencilPathOp final : public GrOp {
20 public:
21     DEFINE_OP_CLASS_ID
22 
Make(const SkMatrix & viewMatrix,bool useHWAA,GrPathRendering::FillType fillType,bool hasStencilClip,int numStencilBits,const GrScissorState & scissor,GrRenderTarget * renderTarget,const GrPath * path)23     static std::unique_ptr<GrOp> Make(const SkMatrix& viewMatrix,
24                                       bool useHWAA,
25                                       GrPathRendering::FillType fillType,
26                                       bool hasStencilClip,
27                                       int numStencilBits,
28                                       const GrScissorState& scissor,
29                                       GrRenderTarget* renderTarget,
30                                       const GrPath* path) {
31         return std::unique_ptr<GrOp>(new GrStencilPathOp(viewMatrix, useHWAA, fillType,
32                                                          hasStencilClip, numStencilBits, scissor,
33                                                          renderTarget, path));
34     }
35 
name()36     const char* name() const override { return "StencilPathOp"; }
37 
dumpInfo()38     SkString dumpInfo() const override {
39         SkString string;
40         string.printf("PATH: 0x%p, AA:%d", fPath.get(), fUseHWAA);
41         string.append(INHERITED::dumpInfo());
42         return string;
43     }
44 
45 private:
GrStencilPathOp(const SkMatrix & viewMatrix,bool useHWAA,GrPathRendering::FillType fillType,bool hasStencilClip,int numStencilBits,const GrScissorState & scissor,GrRenderTarget * renderTarget,const GrPath * path)46     GrStencilPathOp(const SkMatrix& viewMatrix,
47                     bool useHWAA,
48                     GrPathRendering::FillType fillType,
49                     bool hasStencilClip,
50                     int numStencilBits,
51                     const GrScissorState& scissor,
52                     GrRenderTarget* renderTarget,
53                     const GrPath* path)
54             : INHERITED(ClassID())
55             , fViewMatrix(viewMatrix)
56             , fUseHWAA(useHWAA)
57             , fStencil(GrPathRendering::GetStencilPassSettings(fillType), hasStencilClip,
58                        numStencilBits)
59             , fScissor(scissor)
60             , fRenderTarget(renderTarget)
61             , fPath(path) {
62         this->setBounds(path->getBounds(), HasAABloat::kNo, IsZeroArea::kNo);
63     }
64 
onCombineIfPossible(GrOp * t,const GrCaps & caps)65     bool onCombineIfPossible(GrOp* t, const GrCaps& caps) override { return false; }
66 
onPrepare(GrOpFlushState *)67     void onPrepare(GrOpFlushState*) override {}
68 
onExecute(GrOpFlushState * state)69     void onExecute(GrOpFlushState* state) override {
70         GrPathRendering::StencilPathArgs args(fUseHWAA, fRenderTarget.get(), &fViewMatrix,
71                                               &fScissor, &fStencil);
72         state->gpu()->pathRendering()->stencilPath(args, fPath.get());
73     }
74 
75     SkMatrix fViewMatrix;
76     bool fUseHWAA;
77     GrStencilSettings fStencil;
78     GrScissorState fScissor;
79     GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget;
80     GrPendingIOResource<const GrPath, kRead_GrIOType> fPath;
81 
82     typedef GrOp INHERITED;
83 };
84 
85 #endif
86