Index: experimental/iOSSampleApp/SkSampleUIView.mm |
diff --git a/experimental/iOSSampleApp/SkSampleUIView.mm b/experimental/iOSSampleApp/SkSampleUIView.mm |
index a9defbe610f6bb24b8da9851189702821300fc82..41bf91d4e9360adc0ae2d493a651ee5977339695 100644 |
--- a/experimental/iOSSampleApp/SkSampleUIView.mm |
+++ b/experimental/iOSSampleApp/SkSampleUIView.mm |
@@ -7,6 +7,7 @@ |
#include "SkCanvas.h" |
#include "SkCGUtils.h" |
+#include "SkSurface.h" |
#include "SampleApp.h" |
#if SK_SUPPORT_GPU |
@@ -119,36 +120,16 @@ public: |
fBackend = SampleWindow::kNone_BackEndType; |
} |
- virtual SkCanvas* createCanvas(SampleWindow::DeviceType dType, |
- SampleWindow* win) { |
- switch (dType) { |
- case SampleWindow::kRaster_DeviceType: |
- // fallthrough |
- case SampleWindow::kPicture_DeviceType: |
- // fallthrough |
-#if SK_ANGLE |
- case SampleWindow::kANGLE_DeviceType: |
-#endif |
- break; |
+ virtual SkSurface* createSurface(SampleWindow::DeviceType dType, SampleWindow* win) SK_OVERRIDE{ |
#if SK_SUPPORT_GPU |
- case SampleWindow::kGPU_DeviceType: |
- case SampleWindow::kNullGPU_DeviceType: |
- if (fCurContext) { |
- SkAutoTUnref<SkBaseDevice> device(new SkGpuDevice(fCurContext, |
- fCurRenderTarget)); |
- return new SkCanvas(device); |
- } else { |
- return NULL; |
- } |
- break; |
-#endif |
- default: |
- SkASSERT(false); |
- return NULL; |
+ if (SampleWindow::IsGpuDeviceType(dType) && fCurContext) { |
+ SkSurfaceProps props(win->getSurfaceProps()); |
+ return SkSurface::NewRenderTargetDirect(fCurRenderTarget, &props); |
} |
+#endif |
return NULL; |
} |
- |
+ |
virtual void publishCanvas(SampleWindow::DeviceType dType, |
SkCanvas* canvas, |
SampleWindow* win) SK_OVERRIDE { |
@@ -419,23 +400,25 @@ static FPSState gFPS; |
glViewport(0, 0, fGL.fWidth, fGL.fHeight); |
- SkAutoTUnref<SkCanvas> canvas(fWind->createCanvas()); |
+ SkAutoTUnref<SkSurface> surface(fWind->createSurface()); |
+ SkCanvas* canvas = surface->getCanvas(); |
+ |
// if we're not "retained", then we have to always redraw everything. |
// This call forces us to ignore the fDirtyRgn, and draw everywhere. |
// If we are "retained", we can skip this call (as the raster case does) |
fWind->forceInvalAll(); |
[self drawWithCanvas:canvas]; |
- |
+ |
// This application only creates a single color renderbuffer which is already bound at this point. |
// This call is redundant, but needed if dealing with multiple renderbuffers. |
glBindRenderbuffer(GL_RENDERBUFFER, fGL.fRenderbuffer); |
[fGL.fContext presentRenderbuffer:GL_RENDERBUFFER]; |
- |
} |
- (void)drawInRaster { |
- SkAutoTUnref<SkCanvas> canvas(fWind->createCanvas()); |
+ SkAutoTUnref<SkSurface> surface(fWind->createSurface()); |
+ SkCanvas* canvas = surface->getCanvas(); |
[self drawWithCanvas:canvas]; |
CGImageRef cgimage = SkCreateCGImageRef(fWind->getBitmap()); |
fRasterLayer.contents = (id)cgimage; |