From: bsalomon@google.com Date: Thu, 24 Jan 2013 20:47:18 +0000 (+0000) Subject: Fix SampleApp ANGLE mode. X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~13681 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=82502e2e3966a9b0e48665f20154eaacd2a452b3;p=platform%2Fupstream%2FlibSkiaSharp.git Fix SampleApp ANGLE mode. Review URL: https://codereview.appspot.com/7206052 git-svn-id: http://skia.googlecode.com/svn/trunk@7377 2bbb7eff-a529-9590-31e7-b0007b416f81 --- diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index b59df61..dbc779f 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -252,32 +252,15 @@ public: virtual SkCanvas* createCanvas(SampleWindow::DeviceType dType, SampleWindow* win) { - switch (dType) { - case kRaster_DeviceType: - // fallthrough - case kPicture_DeviceType: - // fallthrough -#if SK_ANGLE - case kANGLE_DeviceType: -#endif - break; #if SK_SUPPORT_GPU - case kGPU_DeviceType: - case kNullGPU_DeviceType: - if (fCurContext) { - SkAutoTUnref device(new SkGpuDevice(fCurContext, - fCurRenderTarget)); - return new SkCanvas(device); - } else { - return NULL; - } - break; + if (IsGpuDeviceType(dType) && NULL != fCurContext) { + SkAutoTUnref device(new SkGpuDevice(fCurContext, fCurRenderTarget)); + return new SkCanvas(device); + } else #endif - default: - SkASSERT(false); - return NULL; + { + return NULL; } - return NULL; } virtual void publishCanvas(SampleWindow::DeviceType dType, @@ -288,7 +271,7 @@ public: // in case we have queued drawing calls fCurContext->flush(); - if (kGPU_DeviceType != dType && kNullGPU_DeviceType != dType) { + if (!IsGpuDeviceType(dType)) { // need to send the raster bits to the (gpu) window fCurContext->setRenderTarget(fCurRenderTarget); const SkBitmap& bm = win->getBitmap(); @@ -1273,30 +1256,15 @@ SkCanvas* SampleWindow::beforeChildren(SkCanvas* canvas) { fPdfCanvas = new SkCanvas(pdfDevice); pdfDevice->unref(); canvas = fPdfCanvas; + } else if (kPicture_DeviceType == fDeviceType) { + fPicture = new SkPicture; + canvas = fPicture->beginRecording(9999, 9999); } else { - switch (fDeviceType) { - case kRaster_DeviceType: - // fallthrough -#if SK_SUPPORT_GPU - case kGPU_DeviceType: - // fallthrough -#if SK_ANGLE - case kANGLE_DeviceType: -#endif // SK_ANGLE -#endif // SK_SUPPORT_GPU - canvas = this->INHERITED::beforeChildren(canvas); - break; - case kPicture_DeviceType: - fPicture = new SkPicture; - canvas = fPicture->beginRecording(9999, 9999); - break; #if SK_SUPPORT_GPU - case kNullGPU_DeviceType: - break; + if (kNullGPU_DeviceType != fDeviceType) #endif - default: - SkASSERT(false); - break; + { + canvas = this->INHERITED::beforeChildren(canvas); } } @@ -2033,21 +2001,6 @@ static const char* gDeviceTypePrefix[] = { SK_COMPILE_ASSERT(SK_ARRAY_COUNT(gDeviceTypePrefix) == SampleWindow::kDeviceTypeCnt, array_size_mismatch); -static const bool gDeviceTypeIsGPU[] = { - false, - false, -#if SK_SUPPORT_GPU - true, -#if SK_ANGLE - true, -#endif // SK_ANGLE - true -#endif // SK_SUPPORT_GPU -}; -SK_COMPILE_ASSERT(SK_ARRAY_COUNT(gDeviceTypeIsGPU) == SampleWindow::kDeviceTypeCnt, - array_size_mismatch); - - static const char* trystate_str(SkOSMenu::TriState state, const char trueStr[], const char falseStr[]) { if (SkOSMenu::kOnState == state) { @@ -2116,8 +2069,9 @@ void SampleWindow::updateTitle() { } #if SK_SUPPORT_GPU - if (gDeviceTypeIsGPU[fDeviceType] && + if (IsGpuDeviceType(fDeviceType) && NULL != fDevManager && + fDevManager->getGrRenderTarget() && fDevManager->getGrRenderTarget()->numSamples() > 0) { title.appendf(" [MSAA: %d]", fDevManager->getGrRenderTarget()->numSamples()); diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h index e062e21..99eb54f 100644 --- a/samplecode/SampleApp.h +++ b/samplecode/SampleApp.h @@ -41,6 +41,21 @@ public: kDeviceTypeCnt }; + + static bool IsGpuDeviceType(DeviceType devType) { + #if SK_SUPPORT_GPU + switch (devType) { + case kGPU_DeviceType: + #if SK_ANGLE + case kANGLE_DeviceType: + #endif // SK_ANGLE + case kNullGPU_DeviceType: + return true; + } + #endif // SK_SUPPORT_GPU + return false; + } + /** * SampleApp ports can subclass this manager class if they want to: * * filter the types of devices supported diff --git a/src/views/win/SkOSWindow_win.cpp b/src/views/win/SkOSWindow_win.cpp index 9267a95..f2d6311 100644 --- a/src/views/win/SkOSWindow_win.cpp +++ b/src/views/win/SkOSWindow_win.cpp @@ -538,7 +538,7 @@ bool SkOSWindow::attachANGLE(int msaaSampleCount) { if (false == bResult) { return false; } - const GrGLInterface* intf = GrGLCreateANGLEInterface(); + SkAutoTUnref intf(GrGLCreateANGLEInterface()); if (intf) { ANGLE_GL_CALL(intf, ClearStencil(0)); @@ -548,7 +548,7 @@ bool SkOSWindow::attachANGLE(int msaaSampleCount) { } } if (eglMakeCurrent(fDisplay, fSurface, fSurface, fContext)) { - const GrGLInterface* intf = GrGLCreateANGLEInterface(); + SkAutoTUnref intf(GrGLCreateANGLEInterface()); if (intf ) { ANGLE_GL_CALL(intf, Viewport(0, 0, SkScalarRound(this->width()), @@ -573,7 +573,7 @@ void SkOSWindow::detachANGLE() { } void SkOSWindow::presentANGLE() { - const GrGLInterface* intf = GrGLCreateANGLEInterface(); + SkAutoTUnref intf(GrGLCreateANGLEInterface()); if (intf) { ANGLE_GL_CALL(intf, Flush());