Create GPU-less build of Skia.
git-svn-id: http://skia.googlecode.com/svn/trunk@4912 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 6adc1b4..a101853 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -9,7 +9,6 @@
#include "SkData.h"
#include "SkCanvas.h"
#include "SkDevice.h"
-#include "SkGpuDevice.h"
#include "SkGraphics.h"
#include "SkImageEncoder.h"
#include "SkPaint.h"
@@ -19,12 +18,17 @@
#include "SkWindow.h"
#include "SampleCode.h"
-#include "GrContext.h"
#include "SkTypeface.h"
+#if SK_SUPPORT_GPU
#include "gl/GrGLInterface.h"
#include "gl/GrGLUtil.h"
#include "GrRenderTarget.h"
+#include "GrContext.h"
+#include "SkGpuDevice.h"
+#else
+class GrContext;
+#endif
#include "SkOSFile.h"
#include "SkPDFDevice.h"
@@ -147,18 +151,22 @@
class SampleWindow::DefaultDeviceManager : public SampleWindow::DeviceManager {
public:
- DefaultDeviceManager()
- : fCurContext(NULL)
- , fCurIntf(NULL)
- , fCurRenderTarget(NULL)
- , fBackend(kNone_BackEndType)
- , fMSAASampleCount(0) {
+ DefaultDeviceManager() {
+#if SK_SUPPORT_GPU
+ fCurContext = NULL;
+ fCurIntf = NULL;
+ fCurRenderTarget = NULL;
+ fMSAASampleCount = 0;
+#endif
+ fBackend = kNone_BackEndType;
}
virtual ~DefaultDeviceManager() {
+#if SK_SUPPORT_GPU
SkSafeUnref(fCurContext);
SkSafeUnref(fCurIntf);
SkSafeUnref(fCurRenderTarget);
+#endif
}
virtual void setUpBackend(SampleWindow* win, int msaaSampleCount) {
@@ -166,6 +174,7 @@
fBackend = kNone_BackEndType;
+#if SK_SUPPORT_GPU
switch (win->getDeviceType()) {
case kRaster_DeviceType:
// fallthrough
@@ -182,7 +191,7 @@
// ANGLE is really the only odd man out
fBackend = kANGLE_BackEndType;
break;
-#endif
+#endif // SK_ANGLE
default:
SkASSERT(false);
break;
@@ -209,7 +218,7 @@
case kANGLE_DeviceType:
fCurIntf = GrGLCreateANGLEInterface();
break;
-#endif
+#endif // SK_ANGLE
case kNullGPU_DeviceType:
fCurIntf = GrGLCreateNullInterface();
break;
@@ -230,13 +239,13 @@
win->detach();
}
-
+#endif // SK_SUPPORT_GPU
// call windowSizeChanged to create the render target
- windowSizeChanged(win);
+ this->windowSizeChanged(win);
}
virtual void tearDownBackend(SampleWindow *win) {
-
+#if SK_SUPPORT_GPU
SkSafeUnref(fCurContext);
fCurContext = NULL;
@@ -245,7 +254,7 @@
SkSafeUnref(fCurRenderTarget);
fCurRenderTarget = NULL;
-
+#endif
win->detach();
fBackend = kNone_BackEndType;
}
@@ -262,6 +271,7 @@
case kANGLE_DeviceType:
#endif
break;
+#if SK_SUPPORT_GPU
case kGPU_DeviceType:
case kNullGPU_DeviceType:
if (fCurContext) {
@@ -271,6 +281,7 @@
return false;
}
break;
+#endif
default:
SkASSERT(false);
return false;
@@ -281,6 +292,7 @@
virtual void publishCanvas(SampleWindow::DeviceType dType,
SkCanvas* canvas,
SampleWindow* win) {
+#if SK_SUPPORT_GPU
if (fCurContext) {
// in case we have queued drawing calls
fCurContext->flush();
@@ -295,12 +307,13 @@
bm.rowBytes());
}
}
+#endif
win->present();
}
virtual void windowSizeChanged(SampleWindow* win) {
-
+#if SK_SUPPORT_GPU
if (fCurContext) {
win->attach(fBackend, fMSAASampleCount);
@@ -317,23 +330,35 @@
SkSafeUnref(fCurRenderTarget);
fCurRenderTarget = fCurContext->createPlatformRenderTarget(desc);
}
+#endif
}
virtual GrContext* getGrContext() {
+#if SK_SUPPORT_GPU
return fCurContext;
+#else
+ return NULL;
+#endif
}
virtual GrRenderTarget* getGrRenderTarget() SK_OVERRIDE {
+#if SK_SUPPORT_GPU
return fCurRenderTarget;
+#else
+ return NULL;
+#endif
}
private:
+
+#if SK_SUPPORT_GPU
GrContext* fCurContext;
const GrGLInterface* fCurIntf;
GrRenderTarget* fCurRenderTarget;
+ int fMSAASampleCount;
+#endif
SkOSWindow::SkBackEndTypes fBackend;
- int fMSAASampleCount;
typedef SampleWindow::DeviceManager INHERITED;
};
@@ -657,13 +682,16 @@
static inline SampleWindow::DeviceType cycle_devicetype(SampleWindow::DeviceType ct) {
static const SampleWindow::DeviceType gCT[] = {
SampleWindow::kPicture_DeviceType,
+#if SK_SUPPORT_GPU
SampleWindow::kGPU_DeviceType,
#if SK_ANGLE
SampleWindow::kANGLE_DeviceType,
-#endif
+#endif // SK_ANGLE
SampleWindow::kRaster_DeviceType, // skip the null gpu device in normal cycling
+#endif // SK_SUPPORT_GPU
SampleWindow::kRaster_DeviceType
};
+ SK_COMPILE_ASSERT(SK_ARRAY_COUNT(gCT) == SampleWindow::kDeviceTypeCnt, array_size_mismatch);
return gCT[ct];
}
@@ -1233,19 +1261,23 @@
switch (fDeviceType) {
case kRaster_DeviceType:
// fallthrough
+#if SK_SUPPORT_GPU
case kGPU_DeviceType:
// fallthrough
#if SK_ANGLE
case kANGLE_DeviceType:
-#endif
+#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;
+#endif
default:
SkASSERT(false);
break;
@@ -1737,6 +1769,7 @@
this->inval(NULL);
this->updateTitle();
return true;
+#if SK_SUPPORT_GPU
case '\\':
this->setDeviceType(kNullGPU_DeviceType);
this->inval(NULL);
@@ -1753,6 +1786,7 @@
}
}
return true;
+#endif
case 's':
fScale = !fScale;
this->inval(NULL);
@@ -1967,22 +2001,31 @@
static const char* gDeviceTypePrefix[] = {
"raster: ",
"picture: ",
+#if SK_SUPPORT_GPU
"opengl: ",
#if SK_ANGLE
"angle: ",
-#endif
+#endif // SK_ANGLE
"null-gl: "
+#endif // SK_SUPPORT_GPU
};
+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
+#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[]) {
@@ -2051,12 +2094,14 @@
title.prepend("! ");
}
+#if SK_SUPPORT_GPU
if (gDeviceTypeIsGPU[fDeviceType] &&
NULL != fDevManager &&
fDevManager->getGrRenderTarget()->numSamples() > 0) {
title.appendf(" [MSAA: %d]",
fDevManager->getGrRenderTarget()->numSamples());
}
+#endif
this->setTitle(title.c_str());
}