/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrCCPRAtlas_DEFINED #define GrCCPRAtlas_DEFINED #include "SkRefCnt.h" #include "SkSize.h" class GrCaps; class GrDrawOp; class GrOnFlushResourceProvider; class GrRenderTargetContext; class GrTextureProxy; struct SkIPoint16; /** * This class implements a dynamic size GrRectanizer that grows until it reaches the implementation- * dependent max texture size. When finalized, it also creates and stores a GrTextureProxy for the * underlying atlas. */ class GrCCPRAtlas { public: static constexpr int kMinSize = 1024; GrCCPRAtlas(const GrCaps&, int minWidth, int minHeight); ~GrCCPRAtlas(); bool addRect(int devWidth, int devHeight, SkIPoint16* loc); const SkISize& drawBounds() { return fDrawBounds; } sk_sp SK_WARN_UNUSED_RESULT finalize(GrOnFlushResourceProvider*, std::unique_ptr atlasOp); sk_sp textureProxy() const { return fTextureProxy; } private: class Node; bool internalPlaceRect(int w, int h, SkIPoint16* loc); const int fMaxAtlasSize; int fWidth; int fHeight; SkISize fDrawBounds; std::unique_ptr fTopNode; sk_sp fTextureProxy; }; #endif