Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Unified Diff: src/gpu/GrLayerCache.h

Issue 354533004: Begin atlasing (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Readd missing file Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrAtlas.cpp ('k') | src/gpu/GrLayerCache.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrLayerCache.h
diff --git a/src/gpu/GrLayerCache.h b/src/gpu/GrLayerCache.h
index a7ba2afb30f2a63969b5234d17b881a65b115189..27479193aa5102724efd4eace527fc51f0160135 100644
--- a/src/gpu/GrLayerCache.h
+++ b/src/gpu/GrLayerCache.h
@@ -8,6 +8,8 @@
#ifndef GrLayerCache_DEFINED
#define GrLayerCache_DEFINED
+#define USE_ATLAS 0
+
#include "GrAllocPool.h"
#include "GrAtlas.h"
#include "GrTHashTable.h"
@@ -17,61 +19,38 @@
class GrGpu;
class SkPicture;
-// GrAtlasLocation captures an atlased item's position in the atlas. This
-// means the plot in which it resides and its bounds inside the plot.
-// TODO: Make GrGlyph use one of these?
-class GrAtlasLocation {
-public:
- GrAtlasLocation() : fPlot(NULL) {}
-
- void set(GrPlot* plot, const GrIRect16& bounds) {
- fPlot = plot;
- fBounds = bounds;
- }
-
- const GrPlot* plot() const {
- return fPlot;
- }
-
- const GrIRect16& bounds() const {
- return fBounds;
- }
-
-private:
- GrPlot* fPlot;
- GrIRect16 fBounds; // only valid is fPlot != NULL
-};
-
// GrCachedLayer encapsulates the caching information for a single saveLayer.
//
-// Atlased layers get a ref to their atlas GrTexture and their GrAtlasLocation
-// is filled in.
-// In this case GrCachedLayer is roughly equivalent to a GrGlyph in the font
-// caching system.
+// Atlased layers get a ref to their atlas GrTexture and 'fRect' contains
+// their absolute location in the backing texture.
+//
+// Non-atlased layers get a ref to the GrTexture in which they reside. Their
+// 'fRect' will be empty.
//
-// Non-atlased layers get a ref to the GrTexture in which they reside.
// TODO: can we easily reuse the empty space in the non-atlased GrTexture's?
struct GrCachedLayer {
public:
- uint32_t pictureID() const { return fPictureID; }
- int layerID() const { return fLayerID; }
-
- void init(uint32_t pictureID, int layerID) {
+ GrCachedLayer(uint32_t pictureID, int layerID) {
fPictureID = pictureID;
- fLayerID = layerID;
- fTexture = NULL;
- fLocation.set(NULL, GrIRect16::MakeEmpty());
+ fLayerID = layerID;
+ fTexture = NULL;
+ fRect = GrIRect16::MakeEmpty();
}
+ uint32_t pictureID() const { return fPictureID; }
+ int layerID() const { return fLayerID; }
+
// This call takes over the caller's ref
- void setTexture(GrTexture* texture) {
+ void setTexture(GrTexture* texture, const GrIRect16& rect) {
if (NULL != fTexture) {
fTexture->unref();
}
fTexture = texture; // just take over caller's ref
+ fRect = rect;
}
- GrTexture* getTexture() { return fTexture; }
+ GrTexture* texture() { return fTexture; }
+ const GrIRect16& rect() const { return fRect; }
private:
uint32_t fPictureID;
@@ -84,7 +63,9 @@ private:
// non-NULL, that means that the texture is locked in the texture cache.
GrTexture* fTexture;
- GrAtlasLocation fLocation; // only valid if the layer is atlased
+ // For non-atlased layers 'fRect' is empty otherwise it is the bound of
+ // the layer in the atlas.
+ GrIRect16 fRect;
};
// The GrLayerCache caches pre-computed saveLayers for later rendering.
@@ -115,6 +96,9 @@ public:
// Inform the cache that layer's cached image is not currently required
void unlock(GrCachedLayer* layer);
+ // Remove all the layers (and unlock any resources) associated with 'picture'
+ void purge(const SkPicture* picture);
+
private:
GrContext* fContext; // pointer back to owning context
SkAutoTDelete<GrAtlas> fAtlas; // TODO: could lazily allocate
@@ -122,10 +106,13 @@ private:
class PictureLayerKey;
GrTHashTable<GrCachedLayer, PictureLayerKey, 7> fLayerHash;
- GrTAllocPool<GrCachedLayer> fLayerPool;
- void init();
+ void initAtlas();
GrCachedLayer* createLayer(const SkPicture* picture, int layerID);
+
+ // for testing
+ friend class GetNumLayers;
+ int numLayers() const { return fLayerHash.count(); }
};
#endif
« no previous file with comments | « src/gpu/GrAtlas.cpp ('k') | src/gpu/GrLayerCache.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698