Index: src/gpu/SkGpuDevice.cpp |
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp |
index 9041bdfba25b1ec3859e3c0b0095a17139ef01d7..cf152fa6e51b023027c697250b06fd1fb05725dd 100644 |
--- a/src/gpu/SkGpuDevice.cpp |
+++ b/src/gpu/SkGpuDevice.cpp |
@@ -30,6 +30,7 @@ |
#include "SkPathEffect.h" |
#include "SkPicture.h" |
#include "SkPictureData.h" |
+#include "SkPicturePlayback.h" |
#include "SkRRect.h" |
#include "SkStroke.h" |
#include "SkSurface.h" |
@@ -1859,7 +1860,7 @@ bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* pi |
SkIRect query; |
clipBounds.roundOut(&query); |
- const SkPicture::OperationList& ops = picture->EXPERIMENTAL_getActiveOps(query); |
+ SkAutoTDelete<const SkPicture::OperationList> ops(picture->EXPERIMENTAL_getActiveOps(query)); |
// This code pre-renders the entire layer since it will be cached and potentially |
// reused with different clips (e.g., in different tiles). Because of this the |
@@ -1867,12 +1868,12 @@ bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* pi |
// is used to limit which clips are pre-rendered. |
static const int kSaveLayerMaxSize = 256; |
- if (ops.valid()) { |
+ if (NULL != ops.get()) { |
// In this case the picture has been generated with a BBH so we use |
// the BBH to limit the pre-rendering to just the layers needed to cover |
// the region being drawn |
- for (int i = 0; i < ops.numOps(); ++i) { |
- uint32_t offset = ops.offset(i); |
+ for (int i = 0; i < ops->numOps(); ++i) { |
+ uint32_t offset = ops->offset(i); |
// For now we're saving all the layers in the GPUAccelData so they |
// can be nested. Additionally, the nested layers appear before |
@@ -1928,7 +1929,7 @@ bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* pi |
} |
} |
- SkPictureData::PlaybackReplacements replacements; |
+ SkPicturePlayback::PlaybackReplacements replacements; |
// Generate the layer and/or ensure it is locked |
for (int i = 0; i < gpuData->numSaveLayers(); ++i) { |
@@ -1937,7 +1938,7 @@ bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* pi |
const GPUAccelData::SaveLayerInfo& info = gpuData->saveLayerInfo(i); |
- SkPictureData::PlaybackReplacements::ReplacementInfo* layerInfo = |
+ SkPicturePlayback::PlaybackReplacements::ReplacementInfo* layerInfo = |
replacements.push(); |
layerInfo->fStart = info.fSaveLayerOpID; |
layerInfo->fStop = info.fRestoreOpID; |
@@ -2009,9 +2010,9 @@ bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* pi |
SkIntToScalar(layer->rect().fTop)); |
} |
- picture->fData->setDrawLimits(info.fSaveLayerOpID, info.fRestoreOpID); |
- picture->fData->draw(*canvas, NULL); |
- picture->fData->setDrawLimits(0, 0); |
+ SkPicturePlayback playback(picture); |
+ playback.setDrawLimits(info.fSaveLayerOpID, info.fRestoreOpID); |
+ playback.draw(canvas, NULL); |
canvas->flush(); |
} |
@@ -2019,9 +2020,10 @@ bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* pi |
} |
// Playback using new layers |
- picture->fData->setReplacements(&replacements); |
- picture->fData->draw(*canvas, NULL); |
- picture->fData->setReplacements(NULL); |
+ SkPicturePlayback playback(picture); |
+ |
+ playback.setReplacements(&replacements); |
+ playback.draw(canvas, NULL); |
// unlock the layers |
for (int i = 0; i < gpuData->numSaveLayers(); ++i) { |