| Index: src/gpu/GrLayerHoister.cpp
|
| diff --git a/src/gpu/GrLayerHoister.cpp b/src/gpu/GrLayerHoister.cpp
|
| index b53c1b80cdda6be05f85d3e544abeb6572cd51e0..b7653ee295705fd2be324fde08a23dc016caf7ae 100644
|
| --- a/src/gpu/GrLayerHoister.cpp
|
| +++ b/src/gpu/GrLayerHoister.cpp
|
| @@ -19,6 +19,7 @@
|
| // required texture/render target resources.
|
| static void prepare_for_hoisting(GrLayerCache* layerCache,
|
| const SkPicture* topLevelPicture,
|
| + const SkMatrix& matrix,
|
| const SkLayerInfo::BlockInfo& info,
|
| const SkIRect& layerRect,
|
| SkTDArray<GrHoistedLayer>* needRendering,
|
| @@ -27,7 +28,9 @@ static void prepare_for_hoisting(GrLayerCache* layerCache,
|
| int numSamples) {
|
| const SkPicture* pict = info.fPicture ? info.fPicture : topLevelPicture;
|
|
|
| - SkMatrix combined = SkMatrix::Concat(info.fPreMat, info.fLocalMat);
|
| + SkMatrix combined = matrix;
|
| + combined.preConcat(info.fPreMat);
|
| + combined.preConcat(info.fLocalMat);
|
|
|
| GrCachedLayer* layer = layerCache->findLayerOrCreate(pict->uniqueID(),
|
| info.fSaveLayerOpID,
|
| @@ -73,7 +76,8 @@ static void prepare_for_hoisting(GrLayerCache* layerCache,
|
| hl->fPicture = pict;
|
| hl->fOffset = SkIPoint::Make(layerRect.fLeft, layerRect.fTop);
|
| hl->fLocalMat = info.fLocalMat;
|
| - hl->fPreMat = info.fPreMat;
|
| + hl->fPreMat = matrix;
|
| + hl->fPreMat.preConcat(info.fPreMat);
|
| }
|
|
|
| // Atlased layers must be small enough to fit in the atlas, not have a
|
| @@ -81,6 +85,7 @@ static void prepare_for_hoisting(GrLayerCache* layerCache,
|
| // TODO: allow leaf nested layers to appear in the atlas.
|
| void GrLayerHoister::FindLayersToAtlas(GrContext* context,
|
| const SkPicture* topLevelPicture,
|
| + const SkMatrix& initialMat,
|
| const SkRect& query,
|
| SkTDArray<GrHoistedLayer>* atlased,
|
| SkTDArray<GrHoistedLayer>* recycled,
|
| @@ -119,25 +124,27 @@ void GrLayerHoister::FindLayersToAtlas(GrContext* context,
|
| continue;
|
| }
|
|
|
| - SkRect layerRect = info.fBounds;
|
| + SkRect layerRect;
|
| + initialMat.mapRect(&layerRect, info.fBounds);
|
| if (!layerRect.intersect(query)) {
|
| continue;
|
| }
|
|
|
| - SkIRect ir;
|
| - layerRect.roundOut(&ir);
|
| + const SkIRect ir = layerRect.roundOut();
|
|
|
| if (!GrLayerCache::PlausiblyAtlasable(ir.width(), ir.height())) {
|
| continue;
|
| }
|
|
|
| - prepare_for_hoisting(layerCache, topLevelPicture, info, ir, atlased, recycled, true, 0);
|
| + prepare_for_hoisting(layerCache, topLevelPicture, initialMat,
|
| + info, ir, atlased, recycled, true, 0);
|
| }
|
|
|
| }
|
|
|
| void GrLayerHoister::FindLayersToHoist(GrContext* context,
|
| const SkPicture* topLevelPicture,
|
| + const SkMatrix& initialMat,
|
| const SkRect& query,
|
| SkTDArray<GrHoistedLayer>* needRendering,
|
| SkTDArray<GrHoistedLayer>* recycled,
|
| @@ -166,15 +173,15 @@ void GrLayerHoister::FindLayersToHoist(GrContext* context,
|
| continue;
|
| }
|
|
|
| - SkRect layerRect = info.fBounds;
|
| + SkRect layerRect;
|
| + initialMat.mapRect(&layerRect, info.fBounds);
|
| if (!layerRect.intersect(query)) {
|
| continue;
|
| }
|
|
|
| - SkIRect ir;
|
| - layerRect.roundOut(&ir);
|
| + const SkIRect ir = layerRect.roundOut();
|
|
|
| - prepare_for_hoisting(layerCache, topLevelPicture, info, ir,
|
| + prepare_for_hoisting(layerCache, topLevelPicture, initialMat, info, ir,
|
| needRendering, recycled, false, numSamples);
|
| }
|
| }
|
|
|