diff options
| author | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-04-06 20:13:38 +0000 |
|---|---|---|
| committer | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-04-06 20:13:38 +0000 |
| commit | 1195925b05ee9d666ea8a8f68fde5d8ca7e49b04 (patch) | |
| tree | ac396c0182d7a933aa23f35d7f29e3a6dce10265 /samplecode/SampleApp.cpp | |
| parent | 09042b80d22837c760bb530124aaa67469b19b8f (diff) | |
Add MSAA option to SampleApp
Review URL: http://codereview.appspot.com/5969049
git-svn-id: http://skia.googlecode.com/svn/trunk@3627 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode/SampleApp.cpp')
| -rw-r--r-- | samplecode/SampleApp.cpp | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index 92c9e6c984..1cd9c672aa 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -139,7 +139,8 @@ public: : fCurContext(NULL) , fCurIntf(NULL) , fCurRenderTarget(NULL) - , fBackend(kNone_BackEndType) { + , fBackend(kNone_BackEndType) + , fMSAASampleCount(0) { } virtual ~DefaultDeviceManager() { @@ -148,7 +149,7 @@ public: SkSafeUnref(fCurRenderTarget); } - virtual void setUpBackend(SampleWindow* win) { + virtual void setUpBackend(SampleWindow* win, int msaaSampleCount) { SkASSERT(kNone_BackEndType == fBackend); fBackend = kNone_BackEndType; @@ -175,11 +176,12 @@ public: break; } - bool result = win->attach(fBackend); + bool result = win->attach(fBackend, msaaSampleCount); if (!result) { SkDebugf("Failed to initialize GL"); return; } + fMSAASampleCount = msaaSampleCount; SkASSERT(NULL == fCurIntf); switch (win->getDeviceType()) { @@ -287,7 +289,7 @@ public: virtual void windowSizeChanged(SampleWindow* win) { if (fCurContext) { - win->attach(fBackend); + win->attach(fBackend, fMSAASampleCount); GrPlatformRenderTargetDesc desc; desc.fWidth = SkScalarRound(win->width()); @@ -307,12 +309,18 @@ public: virtual GrContext* getGrContext() { return fCurContext; } + + virtual GrRenderTarget* getGrRenderTarget() SK_OVERRIDE { + return fCurRenderTarget; + } + private: GrContext* fCurContext; const GrGLInterface* fCurIntf; GrRenderTarget* fCurRenderTarget; SkOSWindow::SkBackEndTypes fBackend; + int fMSAASampleCount; typedef SampleWindow::DeviceManager INHERITED; }; @@ -645,9 +653,10 @@ static inline SampleWindow::DeviceType cycle_devicetype(SampleWindow::DeviceType } static void usage(const char * argv0) { - SkDebugf("%s [--slide sampleName] [-i resourcePath]\n", argv0); + SkDebugf("%s [--slide sampleName] [-i resourcePath] [-msaa sampleCount]\n", argv0); SkDebugf(" sampleName: sample at which to start.\n"); SkDebugf(" resourcePath: directory that stores image resources.\n"); + SkDebugf(" msaa: request multisampling with the given sample count.\n"); } SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* devManager) : INHERITED(hwnd) { @@ -663,6 +672,7 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev const char* resourcePath = NULL; fCurrIndex = -1; + fMSAASampleCount = 0; const char* const commandName = argv[0]; char* const* stop = argv + argc; @@ -680,7 +690,12 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev fprintf(stderr, "Unknown sample \"%s\"\n", *argv); } } - } + } else if (strcmp(*argv, "--msaa") == 0) { + ++argv; + if (argv < stop && **argv) { + fMSAASampleCount = atoi(*argv); + } + } else { usage(commandName); } @@ -820,7 +835,7 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev devManager->ref(); fDevManager = devManager; } - fDevManager->setUpBackend(this); + fDevManager->setUpBackend(this, fMSAASampleCount); // If another constructor set our dimensions, ensure that our // onSizeChange gets called. @@ -1671,7 +1686,7 @@ void SampleWindow::setDeviceType(DeviceType type) { fDeviceType = type; - fDevManager->setUpBackend(this); + fDevManager->setUpBackend(this, fMSAASampleCount); this->updateTitle(); this->inval(NULL); @@ -1867,6 +1882,16 @@ static const char* gDeviceTypePrefix[] = { "null-gl: " }; +static const bool gDeviceTypeIsGPU[] = { + false, + false, + true, +#if SK_ANGLE + true, +#endif + true +}; + static const char* trystate_str(SkOSMenu::TriState state, const char trueStr[], const char falseStr[]) { if (SkOSMenu::kOnState == state) { @@ -1926,6 +1951,12 @@ void SampleWindow::updateTitle() { title.prepend("! "); } + if (gDeviceTypeIsGPU[fDeviceType] && + fDevManager->getGrRenderTarget()->numSamples() > 0) { + title.appendf(" [MSAA: %d]", + fDevManager->getGrRenderTarget()->numSamples()); + } + this->setTitle(title.c_str()); } |
