| Index: samplecode/SampleApp.cpp
|
| diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
|
| index 9b5a972ec835346e713a6669b71761db3f8582a7..4c225e3d7ca98bd63584c3ff54a63c5b429c430f 100644
|
| --- a/samplecode/SampleApp.cpp
|
| +++ b/samplecode/SampleApp.cpp
|
| @@ -181,10 +181,9 @@ public:
|
|
|
| #if SK_SUPPORT_GPU
|
| switch (win->getDeviceType()) {
|
| - case kRaster_DeviceType:
|
| - // fallthrough
|
| - case kPicture_DeviceType:
|
| - // fallthrough
|
| + case kRaster_DeviceType: // fallthrough
|
| + case kPicture_DeviceType: // fallthrough
|
| + case kDeferred_DeviceType: // fallthrough
|
| case kGPU_DeviceType:
|
| // all these guys use the native backend
|
| fBackend = kNativeGL_BackEndType;
|
| @@ -210,10 +209,9 @@ public:
|
| SkASSERT(NULL == fCurIntf);
|
| SkAutoTUnref<const GrGLInterface> glInterface;
|
| switch (win->getDeviceType()) {
|
| - case kRaster_DeviceType:
|
| - // fallthrough
|
| - case kPicture_DeviceType:
|
| - // fallthrough
|
| + case kRaster_DeviceType: // fallthrough
|
| + case kPicture_DeviceType: // fallthrough
|
| + case kDeferred_DeviceType: // fallthrough
|
| case kGPU_DeviceType:
|
| // all these guys use the native interface
|
| glInterface.reset(GrGLCreateNativeInterface());
|
| @@ -673,7 +671,8 @@ static inline SampleWindow::DeviceType cycle_devicetype(SampleWindow::DeviceType
|
| SampleWindow::kANGLE_DeviceType,
|
| #endif // SK_ANGLE
|
| #endif // SK_SUPPORT_GPU
|
| - SampleWindow::kRaster_DeviceType
|
| + SampleWindow::kDeferred_DeviceType,
|
| + SampleWindow::kRaster_DeviceType,
|
| };
|
| SK_COMPILE_ASSERT(SK_ARRAY_COUNT(gCT) == SampleWindow::kDeviceTypeCnt, array_size_mismatch);
|
| return gCT[ct];
|
| @@ -829,7 +828,7 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
|
| int itemID;
|
|
|
| itemID =fAppMenu->appendList("Device Type", "Device Type", sinkID, 0,
|
| - "Raster", "Picture", "OpenGL",
|
| + "Raster", "Picture", "OpenGL", "Deferred",
|
| #if SK_ANGLE
|
| "ANGLE",
|
| #endif
|
| @@ -1196,6 +1195,12 @@ SkCanvas* SampleWindow::beforeChildren(SkCanvas* canvas) {
|
| canvas = fPDFDocument->beginPage(this->width(), this->height());
|
| } else if (kPicture_DeviceType == fDeviceType) {
|
| canvas = fRecorder.beginRecording(9999, 9999, NULL, 0);
|
| + } else if (kDeferred_DeviceType == fDeviceType) {
|
| + fDeferredSurface.reset(canvas->newSurface(canvas->imageInfo()));
|
| + if (fDeferredSurface.get()) {
|
| + fDeferredCanvas.reset(SkDeferredCanvas::Create(fDeferredSurface));
|
| + canvas = fDeferredCanvas;
|
| + }
|
| } else {
|
| canvas = this->INHERITED::beforeChildren(canvas);
|
| }
|
| @@ -1284,6 +1289,13 @@ void SampleWindow::afterChildren(SkCanvas* orig) {
|
| } else {
|
| picture->playback(orig);
|
| }
|
| + } else if (kDeferred_DeviceType == fDeviceType) {
|
| + SkAutoTUnref<SkImage> image(fDeferredCanvas->newImageSnapshot());
|
| + if (image) {
|
| + orig->drawImage(image, 0, 0, NULL);
|
| + }
|
| + fDeferredCanvas.reset(NULL);
|
| + fDeferredSurface.reset(NULL);
|
| }
|
|
|
| // Do this after presentGL and other finishing, rather than in afterChild
|
| @@ -1858,6 +1870,7 @@ static const char* gDeviceTypePrefix[] = {
|
| "angle: ",
|
| #endif // SK_ANGLE
|
| #endif // SK_SUPPORT_GPU
|
| + "deferred: ",
|
| };
|
| SK_COMPILE_ASSERT(SK_ARRAY_COUNT(gDeviceTypePrefix) == SampleWindow::kDeviceTypeCnt,
|
| array_size_mismatch);
|
|
|