diff options
-rw-r--r-- | src/gpu/GrLayerHoister.cpp | 4 | ||||
-rw-r--r-- | src/gpu/GrRecordReplaceDraw.cpp | 14 | ||||
-rw-r--r-- | tests/RecordReplaceDrawTest.cpp | 11 |
3 files changed, 19 insertions, 10 deletions
diff --git a/src/gpu/GrLayerHoister.cpp b/src/gpu/GrLayerHoister.cpp index ac09df825b..49ca338bb2 100644 --- a/src/gpu/GrLayerHoister.cpp +++ b/src/gpu/GrLayerHoister.cpp @@ -95,7 +95,7 @@ void GrLayerHoister::DrawLayers(const SkPicture* picture, atlasCanvas->concat(layer->ctm()); SkRecordPartialDraw(*picture->fRecord.get(), atlasCanvas, bound, - layer->start(), layer->stop()); + layer->start()+1, layer->stop()); atlasCanvas->restore(); } @@ -129,7 +129,7 @@ void GrLayerHoister::DrawLayers(const SkPicture* picture, layerCanvas->concat(layer->ctm()); SkRecordPartialDraw(*picture->fRecord.get(), layerCanvas, bound, - layer->start(), layer->stop()); + layer->start()+1, layer->stop()); layerCanvas->flush(); } diff --git a/src/gpu/GrRecordReplaceDraw.cpp b/src/gpu/GrRecordReplaceDraw.cpp index f0abd6481e..b53f003904 100644 --- a/src/gpu/GrRecordReplaceDraw.cpp +++ b/src/gpu/GrRecordReplaceDraw.cpp @@ -51,13 +51,18 @@ GrReplacements::lookupByStart(size_t start, int* searchStart) const { } static inline void draw_replacement_bitmap(const GrReplacements::ReplacementInfo* ri, - SkCanvas* canvas) { + SkCanvas* canvas, + const SkMatrix& initialMatrix) { SkRect src = SkRect::Make(ri->fSrcRect); SkRect dst = SkRect::MakeXYWH(SkIntToScalar(ri->fPos.fX), SkIntToScalar(ri->fPos.fY), SkIntToScalar(ri->fSrcRect.width()), SkIntToScalar(ri->fSrcRect.height())); + + canvas->save(); + canvas->setMatrix(initialMatrix); ri->fImage->draw(canvas, &src, dst, ri->fPaint); + canvas->restore(); } void GrRecordReplaceDraw(const SkRecord& record, @@ -71,6 +76,8 @@ void GrRecordReplaceDraw(const SkRecord& record, const GrReplacements::ReplacementInfo* ri = NULL; int searchStart = 0; + const SkMatrix initialMatrix = canvas->getTotalMatrix(); + if (bbh) { // Draw only ops that affect pixels in the canvas's current clip. // The SkRecord and BBH were recorded in identity space. This canvas @@ -89,7 +96,7 @@ void GrRecordReplaceDraw(const SkRecord& record, } ri = replacements->lookupByStart((uintptr_t)ops[i], &searchStart); if (ri) { - draw_replacement_bitmap(ri, canvas); + draw_replacement_bitmap(ri, canvas, initialMatrix); while ((uintptr_t)ops[i] < ri->fStop) { ++i; @@ -107,8 +114,7 @@ void GrRecordReplaceDraw(const SkRecord& record, } ri = replacements->lookupByStart(i, &searchStart); if (ri) { - draw_replacement_bitmap(ri, canvas); - + draw_replacement_bitmap(ri, canvas, initialMatrix); i = ri->fStop; continue; } diff --git a/tests/RecordReplaceDrawTest.cpp b/tests/RecordReplaceDrawTest.cpp index 23bf9adb5a..693f6681c3 100644 --- a/tests/RecordReplaceDrawTest.cpp +++ b/tests/RecordReplaceDrawTest.cpp @@ -112,11 +112,14 @@ void test_replacements(skiatest::Reporter* r, bool useBBH) { SkRecorder canvas(&rerecord, kWidth, kHeight); GrRecordReplaceDraw(record, &canvas, bbh, &replacements, NULL/*callback*/); - REPORTER_ASSERT(r, 4 == rerecord.count()); + REPORTER_ASSERT(r, 7 == rerecord.count()); assert_type<SkRecords::Save>(r, rerecord, 0); - assert_type<SkRecords::DrawBitmapRectToRect>(r, rerecord, 1); - assert_type<SkRecords::DrawRect>(r, rerecord, 2); - assert_type<SkRecords::Restore>(r, rerecord, 3); + assert_type<SkRecords::Save>(r, rerecord, 1); + assert_type<SkRecords::SetMatrix>(r, rerecord, 2); + assert_type<SkRecords::DrawBitmapRectToRect>(r, rerecord, 3); + assert_type<SkRecords::Restore>(r, rerecord, 4); + assert_type<SkRecords::DrawRect>(r, rerecord, 5); + assert_type<SkRecords::Restore>(r, rerecord, 6); } DEF_TEST(RecordReplaceDraw_Replace, r) { test_replacements(r, false); } |