/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrSmallPathRenderer_DEFINED #define GrSmallPathRenderer_DEFINED #include "GrDrawOpAtlas.h" #include "GrOnFlushResourceProvider.h" #include "GrPathRenderer.h" #include "GrRect.h" #include "GrShape.h" #include "SkOpts.h" #include "SkTDynamicHash.h" class GrContext; class ShapeData; class ShapeDataKey; class GrSmallPathRenderer : public GrPathRenderer, public GrOnFlushCallbackObject { public: GrSmallPathRenderer(); ~GrSmallPathRenderer() override; // GrOnFlushCallbackObject overrides // // Note: because this class is associated with a path renderer we want it to be removed from // the list of active OnFlushBackkbackObjects in an freeGpuResources call (i.e., we accept the // default retainOnFreeGpuResources implementation). void preFlush(GrOnFlushResourceProvider* onFlushResourceProvider, const uint32_t*, int, SkTArray<sk_sp<GrRenderTargetContext>>*) override { if (fAtlas) { fAtlas->instantiate(onFlushResourceProvider); } } void postFlush(GrDeferredUploadToken startTokenForNextFlush, const uint32_t* /*opListIDs*/, int /*numOpListIDs*/) override { if (fAtlas) { fAtlas->compact(startTokenForNextFlush); } } using ShapeCache = SkTDynamicHash<ShapeData, ShapeDataKey>; typedef SkTInternalLList<ShapeData> ShapeDataList; static std::unique_ptr<GrDrawOp> createOp_TestingOnly(GrContext*, GrPaint&&, const GrShape&, const SkMatrix& viewMatrix, GrDrawOpAtlas* atlas, ShapeCache*, ShapeDataList*, bool gammaCorrect, const GrUserStencilSettings*); struct PathTestStruct; private: class SmallPathOp; StencilSupport onGetStencilSupport(const GrShape&) const override { return GrPathRenderer::kNoSupport_StencilSupport; } CanDrawPath onCanDrawPath(const CanDrawPathArgs&) const override; bool onDrawPath(const DrawPathArgs&) override; static void HandleEviction(GrDrawOpAtlas::AtlasID, void*); std::unique_ptr<GrDrawOpAtlas> fAtlas; ShapeCache fShapeCache; ShapeDataList fShapeList; typedef GrPathRenderer INHERITED; }; #endif