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