GrDrawPathOp.h revision 9a725dd9485654155e2e4196c32d372360bcdb61
1add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon/* 2add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon * Copyright 2015 Google Inc. 3add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon * 4add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon * Use of this source code is governed by a BSD-style license that can be 5add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon * found in the LICENSE file. 6add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon */ 7add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon 882c263f6e4452227334c349430f85ea662962a2bBrian Salomon#ifndef GrDrawPathOp_DEFINED 982c263f6e4452227334c349430f85ea662962a2bBrian Salomon#define GrDrawPathOp_DEFINED 10add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon 119afd371a8a66f992f98eb2a3fc75ae64bddc730bBrian Salomon#include "GrDrawOp.h" 12742e31de1599f3902810aecdf2e2e3eed3b40a09Brian Salomon#include "GrOpFlushState.h" 13add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon#include "GrPath.h" 14add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon#include "GrPathProcessor.h" 15742e31de1599f3902810aecdf2e2e3eed3b40a09Brian Salomon#include "GrPathRendering.h" 1654d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon#include "GrProcessorSet.h" 17c633abbb342e3af0e56382e8cb7e7d9fed71e237csmartdalton#include "GrStencilSettings.h" 18add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon 191fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon#include "SkTLList.h" 201fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 2154d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomonclass GrPaint; 2254d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon 2382c263f6e4452227334c349430f85ea662962a2bBrian Salomonclass GrDrawPathOpBase : public GrDrawOp { 241fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomonprotected: 2548d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrDrawPathOpBase(uint32_t classID, const SkMatrix& viewMatrix, GrPaint&&, 2648d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrPathRendering::FillType, GrAAType); 27b493eebca14aefbd5f22fb5d45ba978b19db4b18Robert Phillips 2854d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon FixedFunctionFlags fixedFunctionFlags() const override { 2948d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon if (GrAATypeIsHW(fAAType)) { 3048d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon return FixedFunctionFlags::kUsesHWAA | FixedFunctionFlags::kUsesStencil; 3148d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon } 3248d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon return FixedFunctionFlags::kUsesStencil; 3354d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon } 349a725dd9485654155e2e4196c32d372360bcdb61Brian Osman RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip, 359a725dd9485654155e2e4196c32d372360bcdb61Brian Osman GrPixelConfigIsClamped dstIsClamped) override { 369a725dd9485654155e2e4196c32d372360bcdb61Brian Osman return this->doProcessorAnalysis(caps, clip, dstIsClamped).requiresDstTexture() 379a725dd9485654155e2e4196c32d372360bcdb61Brian Osman ? RequiresDstTexture::kYes : RequiresDstTexture::kNo; 38c48af934608bbb65650641f66adb51f2102d4274Brian Salomon } 392bf4b3a97b770811d9e0558dbbfbdb57cfafbdb7Brian Salomon 40f1748f5a9238a0d3e189d50fc5e57ae8b8ec087cRobert Phillips void visitProxies(const VisitProxyFunc& func) const override { 41b493eebca14aefbd5f22fb5d45ba978b19db4b18Robert Phillips fProcessorSet.visitProxies(func); 42b493eebca14aefbd5f22fb5d45ba978b19db4b18Robert Phillips } 43b493eebca14aefbd5f22fb5d45ba978b19db4b18Robert Phillips 4492aee3d6857386f2b5b8e1148e680a7b58e9b1fcBrian Salomonprotected: 45f238469b0532cf28724b811d546c395a0361d7a0joshualitt const SkMatrix& viewMatrix() const { return fViewMatrix; } 4648d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrColor color() const { return fInputColor; } 47193d9cf8f2280cd4f8e509c6f3af6b47cea04935cdalton GrPathRendering::FillType fillType() const { return fFillType; } 4854d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon const GrProcessorSet& processors() const { return fProcessorSet; } 4991326c34ee1f1531d62caa153746821b58e6e55dBrian Salomon GrProcessorSet detachProcessors() { return std::move(fProcessorSet); } 50611572ce3ef9b477e15471c3f5bacb66260e4913Brian Salomon uint32_t pipelineSRGBFlags() const { return fPipelineSRGBFlags; } 51972b2f6041e0b591d9556fc874c24562733c50ceBrian Salomon inline GrPipeline::InitArgs pipelineInitArgs(const GrOpFlushState&); 52a811b1200cc0b5e3819c89f62def23ec203d4b5aBrian Salomon const GrProcessorSet::Analysis& doProcessorAnalysis(const GrCaps& caps, 539a725dd9485654155e2e4196c32d372360bcdb61Brian Osman const GrAppliedClip* clip, 549a725dd9485654155e2e4196c32d372360bcdb61Brian Osman GrPixelConfigIsClamped dstIsClamped) { 5548d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon bool isMixedSamples = GrAAType::kMixedSamples == fAAType; 5648d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon fAnalysis = fProcessorSet.finalize(fInputColor, GrProcessorAnalysisCoverage::kNone, clip, 579a725dd9485654155e2e4196c32d372360bcdb61Brian Osman isMixedSamples, caps, dstIsClamped, &fInputColor); 5854d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon return fAnalysis; 5992aee3d6857386f2b5b8e1148e680a7b58e9b1fcBrian Salomon } 60a811b1200cc0b5e3819c89f62def23ec203d4b5aBrian Salomon const GrProcessorSet::Analysis& processorAnalysis() const { 6148d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon SkASSERT(fAnalysis.isInitialized()); 6254d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon return fAnalysis; 631fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon } 641fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 6554d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomonprivate: 6654d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon void onPrepare(GrOpFlushState*) final {} 67193d9cf8f2280cd4f8e509c6f3af6b47cea04935cdalton 6882c263f6e4452227334c349430f85ea662962a2bBrian Salomon SkMatrix fViewMatrix; 6948d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrColor fInputColor; 70a811b1200cc0b5e3819c89f62def23ec203d4b5aBrian Salomon GrProcessorSet::Analysis fAnalysis; 7182c263f6e4452227334c349430f85ea662962a2bBrian Salomon GrPathRendering::FillType fFillType; 7248d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrAAType fAAType; 73611572ce3ef9b477e15471c3f5bacb66260e4913Brian Salomon uint32_t fPipelineSRGBFlags; 74611572ce3ef9b477e15471c3f5bacb66260e4913Brian Salomon GrProcessorSet fProcessorSet; 751fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 769afd371a8a66f992f98eb2a3fc75ae64bddc730bBrian Salomon typedef GrDrawOp INHERITED; 771fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon}; 781fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 7982c263f6e4452227334c349430f85ea662962a2bBrian Salomonclass GrDrawPathOp final : public GrDrawPathOpBase { 80add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomonpublic: 8125a880960a9a689a745a01071ecba3fe494b5940Brian Salomon DEFINE_OP_CLASS_ID 821b55a963a2374a14bb82eb887bb99ee91680f0ebreed 8348d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon static std::unique_ptr<GrDrawOp> Make(const SkMatrix& viewMatrix, GrPaint&& paint, 8448d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrAAType aaType, GrPath* path) { 8548d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon return std::unique_ptr<GrDrawOp>( 8648d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon new GrDrawPathOp(viewMatrix, std::move(paint), aaType, path)); 87add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon } 88add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon 89add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon const char* name() const override { return "DrawPath"; } 90add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon 911fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon SkString dumpInfo() const override; 921fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 931fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomonprivate: 9448d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrDrawPathOp(const SkMatrix& viewMatrix, GrPaint&& paint, GrAAType aaType, const GrPath* path) 9548d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon : GrDrawPathOpBase(ClassID(), viewMatrix, std::move(paint), path->getFillType(), aaType) 9654d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon , fPath(path) { 9788cf17d099085b8085ab11571b5094163dbb2c84bsalomon this->setTransformedBounds(path->getBounds(), viewMatrix, HasAABloat::kNo, IsZeroArea::kNo); 98add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon } 991dc172165b8186950fda4a269bd1b12c11947b14stephana 10025a880960a9a689a745a01071ecba3fe494b5940Brian Salomon bool onCombineIfPossible(GrOp* t, const GrCaps& caps) override { return false; } 1011fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 1029e50f7b11e9a9d3dc23c924bbb0f0b85c6f1d6cbBrian Salomon void onExecute(GrOpFlushState* state) override; 1031fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 1041fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon GrPendingIOResource<const GrPath, kRead_GrIOType> fPath; 1051dc172165b8186950fda4a269bd1b12c11947b14stephana 10682c263f6e4452227334c349430f85ea662962a2bBrian Salomon typedef GrDrawPathOpBase INHERITED; 1071fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon}; 1081fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 1091fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon// Template this if we decide to support index types other than 16bit 11082c263f6e4452227334c349430f85ea662962a2bBrian Salomonclass GrDrawPathRangeOp final : public GrDrawPathOpBase { 1111fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomonpublic: 112cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton typedef GrPathRendering::PathTransformType TransformType; 113cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 11425a880960a9a689a745a01071ecba3fe494b5940Brian Salomon DEFINE_OP_CLASS_ID 1151b55a963a2374a14bb82eb887bb99ee91680f0ebreed 116f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon struct InstanceData : private ::SkNoncopyable { 117cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton public: 118cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton static InstanceData* Alloc(TransformType transformType, int reserveCnt) { 119cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton int transformSize = GrPathRendering::PathTransformSize(transformType); 120cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton uint8_t* ptr = (uint8_t*)sk_malloc_throw(Align32(sizeof(InstanceData)) + 121cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton Align32(reserveCnt * sizeof(uint16_t)) + 122cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton reserveCnt * transformSize * sizeof(float)); 123cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton InstanceData* instanceData = (InstanceData*)ptr; 124cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton instanceData->fIndices = (uint16_t*)&ptr[Align32(sizeof(InstanceData))]; 125cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton instanceData->fTransformValues = (float*)&ptr[Align32(sizeof(InstanceData)) + 126cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton Align32(reserveCnt * sizeof(uint16_t))]; 127cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton instanceData->fTransformType = transformType; 128cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton instanceData->fInstanceCount = 0; 129cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton instanceData->fRefCnt = 1; 13082c263f6e4452227334c349430f85ea662962a2bBrian Salomon SkDEBUGCODE(instanceData->fReserveCnt = reserveCnt); 131cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton return instanceData; 132cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton } 133cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 134cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton // Overload this method if we start using other transform types. 135cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton void append(uint16_t index, float x, float y) { 136cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton SkASSERT(GrPathRendering::kTranslate_PathTransformType == fTransformType); 137cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton SkASSERT(fInstanceCount < fReserveCnt); 138cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton fIndices[fInstanceCount] = index; 139cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton fTransformValues[2 * fInstanceCount] = x; 140cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton fTransformValues[2 * fInstanceCount + 1] = y; 141cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton ++fInstanceCount; 142cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton } 143cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 144cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton TransformType transformType() const { return fTransformType; } 145cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton int count() const { return fInstanceCount; } 146cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 147cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton const uint16_t* indices() const { return fIndices; } 148cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton uint16_t* indices() { return fIndices; } 149cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 150cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton const float* transformValues() const { return fTransformValues; } 151cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton float* transformValues() { return fTransformValues; } 152cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 153cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton void ref() const { ++fRefCnt; } 154cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 155cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton void unref() const { 156cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton if (0 == --fRefCnt) { 157cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton sk_free(const_cast<InstanceData*>(this)); 158cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton } 159cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton } 160cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 161cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton private: 162cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton static int Align32(int sizeInBytes) { return (sizeInBytes + 3) & ~3; } 163cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 164cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton InstanceData() {} 165cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton ~InstanceData() {} 166cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 16782c263f6e4452227334c349430f85ea662962a2bBrian Salomon uint16_t* fIndices; 16882c263f6e4452227334c349430f85ea662962a2bBrian Salomon float* fTransformValues; 16982c263f6e4452227334c349430f85ea662962a2bBrian Salomon TransformType fTransformType; 17082c263f6e4452227334c349430f85ea662962a2bBrian Salomon int fInstanceCount; 17182c263f6e4452227334c349430f85ea662962a2bBrian Salomon mutable int fRefCnt; 172cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton SkDEBUGCODE(int fReserveCnt;) 173cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton }; 174cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 175f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon static std::unique_ptr<GrDrawOp> Make(const SkMatrix& viewMatrix, SkScalar scale, SkScalar x, 17654d212e1bfaea0be88c3c40820d0b1ae0daebecfBrian Salomon SkScalar y, GrPaint&& paint, 17748d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrPathRendering::FillType fill, GrAAType aaType, 178f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon GrPathRange* range, const InstanceData* instanceData, 179f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon const SkRect& bounds) { 18048d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon return std::unique_ptr<GrDrawOp>(new GrDrawPathRangeOp(viewMatrix, scale, x, y, 18148d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon std::move(paint), fill, aaType, 18248d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon range, instanceData, bounds)); 183add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon } 184add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon 1851fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon const char* name() const override { return "DrawPathRange"; } 1861fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 1871fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon SkString dumpInfo() const override; 1881fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 1891fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomonprivate: 19082c263f6e4452227334c349430f85ea662962a2bBrian Salomon GrDrawPathRangeOp(const SkMatrix& viewMatrix, SkScalar scale, SkScalar x, SkScalar y, 19148d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrPaint&& paint, GrPathRendering::FillType fill, GrAAType aaType, 19248d1b4c2b2c0f41a10376ed657cde043d8f11979Brian Salomon GrPathRange* range, const InstanceData* instanceData, const SkRect& bounds); 193cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 194cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton TransformType transformType() const { return fDraws.head()->fInstanceData->transformType(); } 1951fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 19625a880960a9a689a745a01071ecba3fe494b5940Brian Salomon bool onCombineIfPossible(GrOp* t, const GrCaps& caps) override; 197add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon 1989e50f7b11e9a9d3dc23c924bbb0f0b85c6f1d6cbBrian Salomon void onExecute(GrOpFlushState* state) override; 1991fcc01c4158bd68c679569e6c7cfbb302d0ce170bsalomon 200cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton struct Draw { 201cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton void set(const InstanceData* instanceData, SkScalar x, SkScalar y) { 202cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton fInstanceData.reset(SkRef(instanceData)); 203cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton fX = x; 204cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton fY = y; 205cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton } 206cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 207144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary sk_sp<const InstanceData> fInstanceData; 20882c263f6e4452227334c349430f85ea662962a2bBrian Salomon SkScalar fX, fY; 209cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton }; 210cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 2118585dd26bf74edf26a1cd1c31699c03347f78937cdalton typedef GrPendingIOResource<const GrPathRange, kRead_GrIOType> PendingPathRange; 212cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton typedef SkTLList<Draw, 4> DrawList; 213cdd4682f450b98bad71b8cb0772c02e0902aaa0dcdalton 21482c263f6e4452227334c349430f85ea662962a2bBrian Salomon PendingPathRange fPathRange; 21582c263f6e4452227334c349430f85ea662962a2bBrian Salomon DrawList fDraws; 21682c263f6e4452227334c349430f85ea662962a2bBrian Salomon int fTotalPathCount; 21782c263f6e4452227334c349430f85ea662962a2bBrian Salomon SkScalar fScale; 218add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon 21982c263f6e4452227334c349430f85ea662962a2bBrian Salomon typedef GrDrawPathOpBase INHERITED; 220add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon}; 221add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon 222add79ef7cb2ebd7b80bf0fd5e70281ec6ad5f079bsalomon#endif 223