Adding SkTileGrid: a new subclass of BBoxHierarchy, optimized for tiled playback.
Review URL: https://codereview.appspot.com/6820093
git-svn-id: http://skia.googlecode.com/svn/trunk@6314 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tools/PictureRenderer.cpp b/tools/PictureRenderer.cpp
index 23223da..cb68f39 100644
--- a/tools/PictureRenderer.cpp
+++ b/tools/PictureRenderer.cpp
@@ -22,6 +22,7 @@
#include "SkScalar.h"
#include "SkString.h"
#include "SkTemplates.h"
+#include "SkTileGrid.h"
#include "SkTDArray.h"
#include "SkThreadUtils.h"
#include "SkTypes.h"
@@ -564,12 +565,37 @@
}
};
+class TileGridPicture : public SkPicture {
+public:
+ TileGridPicture(int tileWidth, int tileHeight, int xTileCount, int yTileCount) {
+ fTileWidth = tileWidth;
+ fTileHeight = tileHeight;
+ fXTileCount = xTileCount;
+ fYTileCount = yTileCount;
+ }
+
+ virtual SkBBoxHierarchy* createBBoxHierarchy() const SK_OVERRIDE{
+ return SkNEW_ARGS(SkTileGrid, (fTileWidth, fTileHeight, fXTileCount, fYTileCount));
+ }
+private:
+ int fTileWidth, fTileHeight, fXTileCount, fYTileCount;
+};
+
SkPicture* PictureRenderer::createPicture() {
switch (fBBoxHierarchyType) {
case kNone_BBoxHierarchyType:
return SkNEW(SkPicture);
case kRTree_BBoxHierarchyType:
return SkNEW(RTreePicture);
+ case kTileGrid_BBoxHierarchyType:
+ {
+ int xTileCount = fPicture->width() / fGridWidth +
+ ((fPicture->width() % fGridWidth) ? 1 : 0);
+ int yTileCount = fPicture->height() / fGridHeight +
+ ((fPicture->height() % fGridHeight) ? 1 : 0);
+ return SkNEW_ARGS(TileGridPicture, (fGridWidth, fGridHeight, xTileCount,
+ yTileCount));
+ }
}
SkASSERT(0); // invalid bbhType
return NULL;