| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "DMSrcSink.h" | 8 #include "DMSrcSink.h" |
| 9 #include "SamplePipeControllers.h" | 9 #include "SamplePipeControllers.h" |
| 10 #include "SkCommonFlags.h" | 10 #include "SkCommonFlags.h" |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 | 582 |
| 583 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri
ng* log) const { | 583 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri
ng* log) const { |
| 584 // Record our Src into a picture. | 584 // Record our Src into a picture. |
| 585 SkSize size; | 585 SkSize size; |
| 586 size = src.size(); | 586 size = src.size(); |
| 587 SkPictureRecorder recorder; | 587 SkPictureRecorder recorder; |
| 588 Error err = src.draw(recorder.beginRecording(size.width(), size.height(), fF
actory.get())); | 588 Error err = src.draw(recorder.beginRecording(size.width(), size.height(), fF
actory.get())); |
| 589 if (!err.isEmpty()) { | 589 if (!err.isEmpty()) { |
| 590 return err; | 590 return err; |
| 591 } | 591 } |
| 592 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); | 592 SkAutoTUnref<SkPicture> pic(recorder.endRecordingAsPicture()); |
| 593 | 593 |
| 594 // Turn that picture into a Src that draws into our Sink via tiles + MPD. | 594 // Turn that picture into a Src that draws into our Sink via tiles + MPD. |
| 595 struct ProxySrc : public Src { | 595 struct ProxySrc : public Src { |
| 596 const int fW, fH; | 596 const int fW, fH; |
| 597 const SkPicture* fPic; | 597 const SkPicture* fPic; |
| 598 const SkISize fSize; | 598 const SkISize fSize; |
| 599 ProxySrc(int w, int h, const SkPicture* pic, SkISize size) | 599 ProxySrc(int w, int h, const SkPicture* pic, SkISize size) |
| 600 : fW(w), fH(h), fPic(pic), fSize(size) {} | 600 : fW(w), fH(h), fPic(pic), fSize(size) {} |
| 601 | 601 |
| 602 Error draw(SkCanvas* canvas) const override { | 602 Error draw(SkCanvas* canvas) const override { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 631 } | 631 } |
| 632 surfaces.unrefAll(); | 632 surfaces.unrefAll(); |
| 633 return ""; | 633 return ""; |
| 634 } | 634 } |
| 635 SkISize size() const override { return fSize; } | 635 SkISize size() const override { return fSize; } |
| 636 Name name() const override { sk_throw(); return ""; } // No one should
be calling this. | 636 Name name() const override { sk_throw(); return ""; } // No one should
be calling this. |
| 637 } proxy(fW, fH, pic, src.size()); | 637 } proxy(fW, fH, pic, src.size()); |
| 638 return fSink->draw(proxy, bitmap, stream, log); | 638 return fSink->draw(proxy, bitmap, stream, log); |
| 639 } | 639 } |
| 640 | 640 |
| 641 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 642 |
| 643 ViaSecondPicture::ViaSecondPicture(Sink* sink) : fSink(sink) {} |
| 644 |
| 645 // Draw the Src into two pictures, then draw the second picture into the wrapped
Sink. |
| 646 // This tests that any shortcuts we may take while recording that second picture
are legal. |
| 647 Error ViaSecondPicture::draw( |
| 648 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons
t { |
| 649 struct ProxySrc : public Src { |
| 650 const Src& fSrc; |
| 651 ProxySrc(const Src& src) : fSrc(src) {} |
| 652 |
| 653 Error draw(SkCanvas* canvas) const override { |
| 654 SkSize size; |
| 655 size = fSrc.size(); |
| 656 SkPictureRecorder recorder; |
| 657 SkAutoTUnref<SkPicture> pic; |
| 658 for (int i = 0; i < 2; i++) { |
| 659 Error err = fSrc.draw(recorder.beginRecording(size.width(), size
.height())); |
| 660 if (!err.isEmpty()) { |
| 661 return err; |
| 662 } |
| 663 pic.reset(recorder.endRecordingAsPicture()); |
| 664 } |
| 665 canvas->drawPicture(pic); |
| 666 return ""; |
| 667 } |
| 668 SkISize size() const override { return fSrc.size(); } |
| 669 Name name() const override { sk_throw(); return ""; } // No one should
be calling this. |
| 670 } proxy(src); |
| 671 return fSink->draw(proxy, bitmap, stream, log); |
| 672 } |
| 673 |
| 641 } // namespace DM | 674 } // namespace DM |
| OLD | NEW |