1a44919ea27acd9808a7581362018484355c0f026bsalomon/*
2a44919ea27acd9808a7581362018484355c0f026bsalomon * Copyright 2015 Google Inc.
3a44919ea27acd9808a7581362018484355c0f026bsalomon *
4a44919ea27acd9808a7581362018484355c0f026bsalomon * Use of this source code is governed by a BSD-style license that can be
5a44919ea27acd9808a7581362018484355c0f026bsalomon * found in the LICENSE file.
6a44919ea27acd9808a7581362018484355c0f026bsalomon */
7a44919ea27acd9808a7581362018484355c0f026bsalomon
882c263f6e4452227334c349430f85ea662962a2bBrian Salomon#ifndef GrStencilPathOp_DEFINED
982c263f6e4452227334c349430f85ea662962a2bBrian Salomon#define GrStencilPathOp_DEFINED
10a44919ea27acd9808a7581362018484355c0f026bsalomon
1125a880960a9a689a745a01071ecba3fe494b5940Brian Salomon#include "GrOp.h"
12a44919ea27acd9808a7581362018484355c0f026bsalomon#include "GrPath.h"
13a44919ea27acd9808a7581362018484355c0f026bsalomon#include "GrPathRendering.h"
146b20a559968e1ed0d3aa4ecbd6ddda9e681b4f86Hal Canary#include "GrStencilSettings.h"
15a44919ea27acd9808a7581362018484355c0f026bsalomon
16009e9af5549301be41cfbd9f286ad90842e4096bRobert Phillipsclass GrOpFlushState;
17009e9af5549301be41cfbd9f286ad90842e4096bRobert Phillips
1882c263f6e4452227334c349430f85ea662962a2bBrian Salomonclass GrStencilPathOp final : public GrOp {
19a44919ea27acd9808a7581362018484355c0f026bsalomonpublic:
2025a880960a9a689a745a01071ecba3fe494b5940Brian Salomon    DEFINE_OP_CLASS_ID
211b55a963a2374a14bb82eb887bb99ee91680f0ebreed
22f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon    static std::unique_ptr<GrOp> Make(const SkMatrix& viewMatrix,
23f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon                                      bool useHWAA,
24f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon                                      GrPathRendering::FillType fillType,
25f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon                                      bool hasStencilClip,
26f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon                                      const GrScissorState& scissor,
27f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon                                      const GrPath* path) {
28b9a02a131eba272fbcae320c2bd6c0d668162c2eRobert Phillips
29f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon        return std::unique_ptr<GrOp>(new GrStencilPathOp(viewMatrix, useHWAA, fillType,
3065048139bd26c8edbc6796f220e79b6c848151d7Robert Phillips                                                         hasStencilClip, scissor, path));
31a44919ea27acd9808a7581362018484355c0f026bsalomon    }
32a44919ea27acd9808a7581362018484355c0f026bsalomon
3382c263f6e4452227334c349430f85ea662962a2bBrian Salomon    const char* name() const override { return "StencilPathOp"; }
34a44919ea27acd9808a7581362018484355c0f026bsalomon
35a44919ea27acd9808a7581362018484355c0f026bsalomon    SkString dumpInfo() const override {
36a44919ea27acd9808a7581362018484355c0f026bsalomon        SkString string;
37b9a02a131eba272fbcae320c2bd6c0d668162c2eRobert Phillips        string.printf("Path: 0x%p, AA: %d", fPath.get(), fUseHWAA);
3844fbc79e069c28103a44387d11c62e049ef2967drobertphillips        string.append(INHERITED::dumpInfo());
39a44919ea27acd9808a7581362018484355c0f026bsalomon        return string;
40a44919ea27acd9808a7581362018484355c0f026bsalomon    }
41a44919ea27acd9808a7581362018484355c0f026bsalomon
42a44919ea27acd9808a7581362018484355c0f026bsalomonprivate:
4382c263f6e4452227334c349430f85ea662962a2bBrian Salomon    GrStencilPathOp(const SkMatrix& viewMatrix,
4482c263f6e4452227334c349430f85ea662962a2bBrian Salomon                    bool useHWAA,
4582c263f6e4452227334c349430f85ea662962a2bBrian Salomon                    GrPathRendering::FillType fillType,
4682c263f6e4452227334c349430f85ea662962a2bBrian Salomon                    bool hasStencilClip,
4782c263f6e4452227334c349430f85ea662962a2bBrian Salomon                    const GrScissorState& scissor,
4882c263f6e4452227334c349430f85ea662962a2bBrian Salomon                    const GrPath* path)
4982c263f6e4452227334c349430f85ea662962a2bBrian Salomon            : INHERITED(ClassID())
5082c263f6e4452227334c349430f85ea662962a2bBrian Salomon            , fViewMatrix(viewMatrix)
5182c263f6e4452227334c349430f85ea662962a2bBrian Salomon            , fUseHWAA(useHWAA)
5265048139bd26c8edbc6796f220e79b6c848151d7Robert Phillips            , fFillType(fillType)
5365048139bd26c8edbc6796f220e79b6c848151d7Robert Phillips            , fHasStencilClip(hasStencilClip)
5482c263f6e4452227334c349430f85ea662962a2bBrian Salomon            , fScissor(scissor)
5582c263f6e4452227334c349430f85ea662962a2bBrian Salomon            , fPath(path) {
5688cf17d099085b8085ab11571b5094163dbb2c84bsalomon        this->setBounds(path->getBounds(), HasAABloat::kNo, IsZeroArea::kNo);
576458b6f0a8e8b1e16ec1640d17fe28ab05c8a95bBrian Salomon    }
58a44919ea27acd9808a7581362018484355c0f026bsalomon
5925a880960a9a689a745a01071ecba3fe494b5940Brian Salomon    bool onCombineIfPossible(GrOp* t, const GrCaps& caps) override { return false; }
60a44919ea27acd9808a7581362018484355c0f026bsalomon
61742e31de1599f3902810aecdf2e2e3eed3b40a09Brian Salomon    void onPrepare(GrOpFlushState*) override {}
62a44919ea27acd9808a7581362018484355c0f026bsalomon
63009e9af5549301be41cfbd9f286ad90842e4096bRobert Phillips    void onExecute(GrOpFlushState* state) override;
64a44919ea27acd9808a7581362018484355c0f026bsalomon
652f4ddf6964edba1b8d2fdf50e328b60d10ce6ddfRobert Phillips    SkMatrix                                          fViewMatrix;
662f4ddf6964edba1b8d2fdf50e328b60d10ce6ddfRobert Phillips    bool                                              fUseHWAA;
6765048139bd26c8edbc6796f220e79b6c848151d7Robert Phillips    GrPathRendering::FillType                         fFillType;
6865048139bd26c8edbc6796f220e79b6c848151d7Robert Phillips    bool                                              fHasStencilClip;
692f4ddf6964edba1b8d2fdf50e328b60d10ce6ddfRobert Phillips    GrScissorState                                    fScissor;
702f4ddf6964edba1b8d2fdf50e328b60d10ce6ddfRobert Phillips    GrPendingIOResource<const GrPath, kRead_GrIOType> fPath;
711b55a963a2374a14bb82eb887bb99ee91680f0ebreed
7225a880960a9a689a745a01071ecba3fe494b5940Brian Salomon    typedef GrOp INHERITED;
73a44919ea27acd9808a7581362018484355c0f026bsalomon};
74a44919ea27acd9808a7581362018484355c0f026bsalomon
75a44919ea27acd9808a7581362018484355c0f026bsalomon#endif
76