Index: src/gpu/GrLayerAtlas.h |
diff --git a/src/gpu/GrLayerAtlas.h b/src/gpu/GrLayerAtlas.h |
deleted file mode 100644 |
index cf182626a85c9d55d5ef7d146cf9b8a755817d50..0000000000000000000000000000000000000000 |
--- a/src/gpu/GrLayerAtlas.h |
+++ /dev/null |
@@ -1,157 +0,0 @@ |
-/* |
- * Copyright 2010 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#ifndef GrLayerAtlas_DEFINED |
-#define GrLayerAtlas_DEFINED |
- |
-#include "GrTexture.h" |
- |
-#include "SkPoint.h" |
-#include "SkTDArray.h" |
-#include "SkTInternalLList.h" |
- |
-class GrLayerAtlas; |
-class GrTextureProvider; |
-class GrRectanizer; |
- |
-// The backing GrTexture for a GrLayerAtlas is broken into a spatial grid of Plots. When |
-// the atlas needs space on the texture (i.e., in response to an addToAtlas call), it |
-// iterates through the plots in use by the requesting client looking for space and, |
-// if no space is found, opens up a new Plot for that client. The Plots keep track of |
-// subimage placement via their GrRectanizer. |
-// |
-// If all Plots are full, the replacement strategy is up to the client. The Plot::reset |
-// call will remove a Plot's knowledge of any allocated rects - freeing its space for reuse. |
- |
-class GrLayerAtlas { |
-public: |
- class Plot { |
- SK_DECLARE_INTERNAL_LLIST_INTERFACE(Plot); // In an MRU llist |
- |
- public: |
- // This returns a plot ID unique to each plot in the atlas. They are |
- // consecutive and start at 0. |
- int id() const { return fID; } |
- |
- void reset(); |
- |
- private: |
- friend class GrLayerAtlas; |
- |
- Plot(); |
- ~Plot(); // does not try to delete the fNext field |
- |
- void init(int id, int offX, int offY, int width, int height); |
- |
- bool allocateRect(int width, int height, SkIPoint16*); |
- |
- int fID; |
- GrRectanizer* fRects; |
- SkIPoint16 fOffset; // the offset of the plot in the backing texture |
- }; |
- |
- // This class allows each client to independently track the Plots in |
- // which its data is stored. |
- // For example, multiple pictures may simultaneously store their layers in the |
- // layer atlas. When a picture goes away it can use the ClientPlotUsage to remove itself |
- // from those plots. |
- class ClientPlotUsage { |
- public: |
- ClientPlotUsage(int maxPlots) |
- SkDEBUGCODE(: fMaxPlots(maxPlots)) { |
- fPlots.setReserve(maxPlots); |
- } |
- |
- bool isEmpty() const { return 0 == fPlots.count(); } |
- |
- int numPlots() const { return fPlots.count(); } |
- Plot* plot(int index) { return fPlots[index]; } |
- |
- void appendPlot(Plot* plot) { |
- SkASSERT(fPlots.count() <= fMaxPlots); |
- SkASSERT(!fPlots.contains(plot)); |
- *fPlots.append() = plot; |
- } |
- |
- // remove reference to 'plot' |
- void removePlot(const Plot* plot) { |
- int index = fPlots.find(const_cast<Plot*>(plot)); |
- if (index >= 0) { |
- fPlots.remove(index); |
- } |
- } |
- |
-#ifdef SK_DEBUG |
- bool contains(const Plot* plot) const { |
- return fPlots.contains(const_cast<Plot*>(plot)); |
- } |
-#endif |
- |
- private: |
- SkTDArray<Plot*> fPlots; |
- SkDEBUGCODE(int fMaxPlots;) |
- }; |
- |
- GrLayerAtlas(GrTextureProvider*, GrPixelConfig, GrSurfaceFlags flags, |
- const SkISize& backingTextureSize, |
- int numPlotsX, int numPlotsY); |
- ~GrLayerAtlas(); |
- |
- // Requests a width x height block in the atlas. Upon success it returns |
- // the containing Plot and absolute location in the backing texture. |
- // nullptr is returned if there is no more space in the atlas. |
- Plot* addToAtlas(ClientPlotUsage*, int width, int height, SkIPoint16* loc); |
- |
- GrTexture* getTextureOrNull() const { |
- return fTexture; |
- } |
- |
- GrTexture* getTexture() const { |
- SkASSERT(fTexture); |
- return fTexture; |
- } |
- |
- bool reattachBackingTexture(); |
- |
- void detachBackingTexture() { |
- fTexture.reset(nullptr); |
- } |
- |
- void resetPlots(); |
- |
- enum IterOrder { |
- kLRUFirst_IterOrder, |
- kMRUFirst_IterOrder |
- }; |
- |
- typedef SkTInternalLList<Plot> PlotList; |
- typedef PlotList::Iter PlotIter; |
- Plot* iterInit(PlotIter* iter, IterOrder order) { |
- return iter->init(fPlotList, kLRUFirst_IterOrder == order |
- ? PlotList::Iter::kTail_IterStart |
- : PlotList::Iter::kHead_IterStart); |
- } |
- |
-private: |
- void createBackingTexture(); |
- |
- void makeMRU(Plot* plot); |
- |
- GrTextureProvider* fTexProvider; |
- GrPixelConfig fPixelConfig; |
- GrSurfaceFlags fFlags; |
- SkAutoTUnref<GrTexture> fTexture; |
- |
- SkISize fBackingTextureSize; |
- |
- // allocated array of Plots |
- Plot* fPlotArray; |
- // LRU list of Plots (MRU at head - LRU at tail) |
- PlotList fPlotList; |
-}; |
- |
-#endif |