diff options
Diffstat (limited to 'src/gpu/SkGpuDevice.cpp')
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index bebc3980bd..b6476134d3 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1838,7 +1838,7 @@ void SkGpuDevice::EXPERIMENTAL_optimize(const SkPicture* picture) { fContext->getLayerCache()->trackPicture(picture); } -bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* mainCanvas, const SkPicture* picture, +bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* mainCanvas, const SkPicture* mainPicture, const SkMatrix* matrix, const SkPaint* paint) { // todo: should handle these natively if (matrix || paint) { @@ -1847,38 +1847,27 @@ bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* mainCanvas, const SkPicture fContext->getLayerCache()->processDeletedPictures(); - SkPicture::AccelData::Key key = GrAccelData::ComputeAccelDataKey(); - - const SkPicture::AccelData* data = picture->EXPERIMENTAL_getAccelData(key); - if (NULL == data) { - return false; - } - - const GrAccelData *gpuData = static_cast<const GrAccelData*>(data); - if (0 == gpuData->numSaveLayers()) { - return false; - } - SkRect clipBounds; if (!mainCanvas->getClipBounds(&clipBounds)) { return true; } - SkTDArray<GrCachedLayer*> atlased, nonAtlased; + SkTDArray<GrLayerHoister::HoistedLayer> atlased, nonAtlased; - if (!GrLayerHoister::FindLayersToHoist(gpuData, clipBounds, &atlased, &nonAtlased, + if (!GrLayerHoister::FindLayersToHoist(mainPicture, clipBounds, &atlased, &nonAtlased, fContext->getLayerCache())) { return false; } GrReplacements replacements; - GrLayerHoister::DrawLayers(picture, atlased, nonAtlased, &replacements); + GrLayerHoister::DrawLayers(atlased, nonAtlased, &replacements); // Render the entire picture using new layers - GrRecordReplaceDraw(*picture->fRecord, mainCanvas, picture->fBBH.get(), &replacements, NULL); + GrRecordReplaceDraw(*mainPicture->fRecord, mainCanvas, mainPicture->fBBH.get(), + &replacements, NULL); - GrLayerHoister::UnlockLayers(fContext->getLayerCache(), picture); + GrLayerHoister::UnlockLayers(fContext->getLayerCache(), atlased, nonAtlased); return true; } |