| Index: samplecode/SampleApp.cpp
|
| diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
|
| index b6b9cde06ca0d43181f2633b2e7b370f54ef5c34..4c930c247ba6cae70960c8148178f204e5e1a3f1 100644
|
| --- a/samplecode/SampleApp.cpp
|
| +++ b/samplecode/SampleApp.cpp
|
| @@ -34,6 +34,9 @@
|
| #include "SkWindow.h"
|
| #include "sk_tool_utils.h"
|
|
|
| +#include "SkReadBuffer.h"
|
| +#include "SkStream.h"
|
| +
|
| #if SK_SUPPORT_GPU
|
| # include "gl/GrGLInterface.h"
|
| # include "gl/GrGLUtil.h"
|
| @@ -540,6 +543,26 @@ private:
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| +class SampleTFSerializer : public SkTypefaceSerializer {
|
| +public:
|
| + sk_sp<SkData> serialize(SkTypeface* tf) override {
|
| + tf->ref();
|
| + return SkData::MakeWithCopy(&tf, sizeof(tf));
|
| + }
|
| +};
|
| +
|
| +class SampleTFDeserializer : public SkTypefaceDeserializer {
|
| +public:
|
| + sk_sp<SkTypeface> deserialize(const void* data, size_t size) override {
|
| + SkASSERT(sizeof(SkTypeface*) == size);
|
| + SkTypeface* tf;
|
| + memcpy(&tf, data, size);
|
| + return sk_sp<SkTypeface>(tf); // this was ref'd in SampleTFSerializer
|
| + }
|
| +};
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| enum TilingMode {
|
| kNo_Tiling,
|
| kAbs_128x128_Tiling,
|
| @@ -696,11 +719,14 @@ DEFINE_string(pdfPath, "", "Path to direcotry of pdf files.");
|
| #endif
|
|
|
| #include "SkTaskGroup.h"
|
| +#include "SkForceLinking.h"
|
|
|
| SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* devManager)
|
| : INHERITED(hwnd)
|
| , fDevManager(nullptr) {
|
|
|
| + SkForceLinking(false);
|
| +
|
| SkCommandLineFlags::Parse(argc, argv);
|
|
|
| fCurrIndex = -1;
|
| @@ -851,6 +877,11 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
|
| fSaveToPdf = false;
|
| fSaveToSKP = false;
|
|
|
| + if (true) {
|
| + fPipeSerializer.setTypefaceSerializer(new SampleTFSerializer);
|
| + fPipeDeserializer.setTypefaceDeserializer(new SampleTFDeserializer);
|
| + }
|
| +
|
| int sinkID = this->getSinkID();
|
| fAppMenu = new SkOSMenu;
|
| fAppMenu->setTitle("Global Settings");
|
| @@ -1304,7 +1335,10 @@ SkCanvas* SampleWindow::beforeChildren(SkCanvas* canvas) {
|
| } else if (fSaveToSKP) {
|
| canvas = fRecorder.beginRecording(9999, 9999, nullptr, 0);
|
| } else if (fUsePicture) {
|
| - canvas = fRecorder.beginRecording(9999, 9999, nullptr, 0);
|
| + fPipeStream.reset(new SkDynamicMemoryWStream);
|
| + canvas = fPipeSerializer.beginWrite(SkRect::MakeWH(this->width(), this->height()),
|
| + fPipeStream.get());
|
| +// canvas = fRecorder.beginRecording(9999, 9999, nullptr, 0);
|
| } else {
|
| canvas = this->INHERITED::beforeChildren(canvas);
|
| }
|
| @@ -1366,17 +1400,15 @@ void SampleWindow::afterChildren(SkCanvas* orig) {
|
| }
|
|
|
| if (fUsePicture) {
|
| - sk_sp<SkPicture> picture(fRecorder.finishRecordingAsPicture());
|
| -
|
| - // serialize/deserialize?
|
| - if (false) {
|
| - SkDynamicMemoryWStream wstream;
|
| - picture->serialize(&wstream);
|
| -
|
| - SkAutoTDelete<SkStream> rstream(wstream.detachAsStream());
|
| - picture = SkPicture::MakeFromStream(rstream);
|
| + if (true) {
|
| + fPipeSerializer.endWrite();
|
| + sk_sp<SkData> data(fPipeStream->detachAsData());
|
| + fPipeDeserializer.playback(data->data(), data->size(), orig);
|
| + fPipeStream.reset();
|
| + } else {
|
| + sk_sp<SkPicture> picture(fRecorder.finishRecordingAsPicture());
|
| + orig->drawPicture(picture.get());
|
| }
|
| - orig->drawPicture(picture.get());
|
| }
|
|
|
| // Do this after presentGL and other finishing, rather than in afterChild
|
|
|