diff options
author | 2013-10-17 17:56:10 +0000 | |
---|---|---|
committer | 2013-10-17 17:56:10 +0000 | |
commit | 32bbcf828d66ad244fa25b468bc3a229e531491f (patch) | |
tree | a06033b7e1f2ad4799c587c9553659655cb485e1 /src | |
parent | c2cc1dbe818c8a5a699fbe18c4fc79b9d93daa94 (diff) |
Add texture filtering override to debugger
https://codereview.chromium.org/27716003/
git-svn-id: http://skia.googlecode.com/svn/trunk@11846 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src')
-rw-r--r-- | src/utils/debugger/SkDebugCanvas.cpp | 50 | ||||
-rw-r--r-- | src/utils/debugger/SkDebugCanvas.h | 11 |
2 files changed, 57 insertions, 4 deletions
diff --git a/src/utils/debugger/SkDebugCanvas.cpp b/src/utils/debugger/SkDebugCanvas.cpp index bf81983548..5553e14e52 100644 --- a/src/utils/debugger/SkDebugCanvas.cpp +++ b/src/utils/debugger/SkDebugCanvas.cpp @@ -24,6 +24,8 @@ SkDebugCanvas::SkDebugCanvas(int width, int height) : INHERITED(make_noconfig_bm(width, height)) , fOverdrawViz(false) , fOverdrawFilter(NULL) + , fOverrideTexFiltering(false) + , fTexOverrideFilter(NULL) , fOutstandingSaveCount(0) { // TODO(chudy): Free up memory from all draw commands in destructor. fWidth = width; @@ -109,13 +111,13 @@ static SkPMColor OverdrawXferModeProc(SkPMColor src, SkPMColor dst) { // The OverdrawFilter modifies every paint to use an SkProcXfermode which // in turn invokes OverdrawXferModeProc -class OverdrawFilter : public SkDrawFilter { +class SkOverdrawFilter : public SkDrawFilter { public: - OverdrawFilter() { + SkOverdrawFilter() { fXferMode = new SkProcXfermode(OverdrawXferModeProc); } - virtual ~OverdrawFilter() { + virtual ~SkOverdrawFilter() { delete fXferMode; } @@ -131,6 +133,29 @@ private: typedef SkDrawFilter INHERITED; }; +// SkTexOverrideFilter modifies every paint to use the specified +// texture filtering mode +class SkTexOverrideFilter : public SkDrawFilter { +public: + SkTexOverrideFilter() : fFilterLevel(SkPaint::kNone_FilterLevel) { + } + + void setFilterLevel(SkPaint::FilterLevel filterLevel) { + fFilterLevel = filterLevel; + } + + virtual bool filter(SkPaint* p, Type) SK_OVERRIDE { + p->setFilterLevel(fFilterLevel); + return true; + } + +protected: + SkPaint::FilterLevel fFilterLevel; + +private: + typedef SkDrawFilter INHERITED; +}; + void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { SkASSERT(!fCommandVector.isEmpty()); SkASSERT(index < fCommandVector.count()); @@ -161,12 +186,20 @@ void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { // call setDrawFilter on anything but the root layer odd things happen. if (fOverdrawViz) { if (NULL == fOverdrawFilter) { - fOverdrawFilter = new OverdrawFilter; + fOverdrawFilter = new SkOverdrawFilter; } if (fOverdrawFilter != canvas->getDrawFilter()) { canvas->setDrawFilter(fOverdrawFilter); } + } else if (fOverrideTexFiltering) { + if (NULL == fTexOverrideFilter) { + fTexOverrideFilter = new SkTexOverrideFilter; + } + + if (fTexOverrideFilter != canvas->getDrawFilter()) { + canvas->setDrawFilter(fTexOverrideFilter); + } } else { canvas->setDrawFilter(NULL); } @@ -246,6 +279,15 @@ void SkDebugCanvas::toggleFilter(bool toggle) { fFilter = toggle; } +void SkDebugCanvas::overrideTexFiltering(bool overrideTexFiltering, SkPaint::FilterLevel level) { + if (NULL == fTexOverrideFilter) { + fTexOverrideFilter = new SkTexOverrideFilter; + } + + fOverrideTexFiltering = overrideTexFiltering; + fTexOverrideFilter->setFilterLevel(level); +} + void SkDebugCanvas::clear(SkColor color) { addDrawCommand(new SkClearCommand(color)); } diff --git a/src/utils/debugger/SkDebugCanvas.h b/src/utils/debugger/SkDebugCanvas.h index 705f49af83..aad768bab7 100644 --- a/src/utils/debugger/SkDebugCanvas.h +++ b/src/utils/debugger/SkDebugCanvas.h @@ -16,6 +16,8 @@ #include "SkTArray.h" #include "SkString.h" +class SkTexOverrideFilter; + class SK_API SkDebugCanvas : public SkCanvas { public: SkDebugCanvas(int width, int height); @@ -29,6 +31,11 @@ public: void setOverdrawViz(bool overdrawViz) { fOverdrawViz = overdrawViz; } /** + * Enable or disable texure filtering override + */ + void overrideTexFiltering(bool overrideTexFiltering, SkPaint::FilterLevel level); + + /** Executes all draw calls to the canvas. @param canvas The canvas being drawn to */ @@ -245,9 +252,13 @@ private: SkMatrix fUserMatrix; SkMatrix fMatrix; SkIRect fClip; + bool fOverdrawViz; SkDrawFilter* fOverdrawFilter; + bool fOverrideTexFiltering; + SkTexOverrideFilter* fTexOverrideFilter; + /** Number of unmatched save() calls at any point during a draw. If there are any saveLayer() calls outstanding, we need to resolve |