Index: src/gpu/GrAtlas.h |
diff --git a/src/gpu/GrAtlas.h b/src/gpu/GrAtlas.h |
index 47048a81c7c32030c181720fd4c4f7d95c94d544..49a7bacf2768ad7b96416832718bb513ce65898a 100644 |
--- a/src/gpu/GrAtlas.h |
+++ b/src/gpu/GrAtlas.h |
@@ -16,18 +16,17 @@ |
class GrGpu; |
class GrRectanizer; |
-class GrAtlasMgr; |
class GrAtlas; |
// The backing GrTexture for a set of GrAtlases is broken into a spatial grid of GrPlots. When |
// a GrAtlas needs space on the texture, it requests a GrPlot. Each GrAtlas can claim one |
// or more GrPlots. The GrPlots keep track of subimage placement via their GrRectanizer. Once a |
// GrPlot is "full" (i.e. there is no room for the new subimage according to the GrRectanizer), the |
-// GrAtlas can request a new GrPlot via GrAtlasMgr::addToAtlas(). |
+// GrAtlas can request a new GrPlot via GrAtlas::addToAtlas(). |
// |
// If all GrPlots are allocated, the replacement strategy is up to the client. The drawToken is |
// available to ensure that all draw calls are finished for that particular GrPlot. |
-// GrAtlasMgr::removeUnusedPlots() will free up any finished plots for a given GrAtlas. |
+// GrAtlas::removeUnusedPlots() will free up any finished plots for a given GrAtlas. |
class GrPlot { |
public: |
@@ -47,7 +46,7 @@ public: |
private: |
GrPlot(); |
~GrPlot(); // does not try to delete the fNext field |
- void init(GrAtlasMgr* mgr, int offX, int offY, int width, int height, size_t bpp, |
+ void init(GrAtlas* atlas, int offX, int offY, int width, int height, size_t bpp, |
bool batchUploads); |
// for recycling |
@@ -56,30 +55,42 @@ private: |
unsigned char* fPlotData; |
GrTexture* fTexture; |
GrRectanizer* fRects; |
- GrAtlasMgr* fAtlasMgr; |
+ GrAtlas* fAtlas; |
SkIPoint16 fOffset; // the offset of the plot in the backing texture |
size_t fBytesPerPixel; |
SkIRect fDirtyRect; |
bool fDirty; |
bool fBatchUploads; |
- friend class GrAtlasMgr; |
+ friend class GrAtlas; |
}; |
typedef SkTInternalLList<GrPlot> GrPlotList; |
-class GrAtlasMgr { |
+class GrAtlas { |
public: |
- GrAtlasMgr(GrGpu*, GrPixelConfig, const SkISize& backingTextureSize, |
- int numPlotsX, int numPlotsY, bool batchUploads); |
- ~GrAtlasMgr(); |
+ // This class allows each client to independently track the GrPlots in |
+ // which its data is stored. |
+ class ClientPlotUsage { |
+ public: |
+ bool isEmpty() const { return 0 == fPlots.count(); } |
+ |
+ private: |
+ SkTDArray<GrPlot*> fPlots; |
+ |
+ friend class GrAtlas; |
+ }; |
+ |
+ GrAtlas(GrGpu*, GrPixelConfig, const SkISize& backingTextureSize, |
+ int numPlotsX, int numPlotsY, bool batchUploads); |
+ ~GrAtlas(); |
// add subimage of width, height dimensions to atlas |
// returns the containing GrPlot and location relative to the backing texture |
- GrPlot* addToAtlas(GrAtlas*, int width, int height, const void*, SkIPoint16*); |
+ GrPlot* addToAtlas(ClientPlotUsage*, int width, int height, const void*, SkIPoint16*); |
// remove reference to this plot |
- bool removePlot(GrAtlas* atlas, const GrPlot* plot); |
+ void removePlot(ClientPlotUsage* usage, const GrPlot* plot); |
// get a plot that's not being used by the current draw |
// this allows us to overwrite this plot without flushing |
@@ -92,7 +103,7 @@ public: |
void uploadPlotsToTexture(); |
private: |
- void moveToHead(GrPlot* plot); |
+ void makeMRU(GrPlot* plot); |
GrGpu* fGpu; |
GrPixelConfig fPixelConfig; |
@@ -104,21 +115,8 @@ private: |
// allocated array of GrPlots |
GrPlot* fPlotArray; |
- // LRU list of GrPlots |
+ // LRU list of GrPlots (MRU at head - LRU at tail) |
GrPlotList fPlotList; |
}; |
-class GrAtlas { |
-public: |
- GrAtlas() { } |
- ~GrAtlas() { } |
- |
- bool isEmpty() { return 0 == fPlots.count(); } |
- |
-private: |
- SkTDArray<GrPlot*> fPlots; |
- |
- friend class GrAtlasMgr; |
-}; |
- |
#endif |