Add texture filtering override to debugger
https://codereview.chromium.org/27716003/
git-svn-id: http://skia.googlecode.com/svn/trunk/src@11846 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/utils/debugger/SkDebugCanvas.cpp b/utils/debugger/SkDebugCanvas.cpp
index bf81983..5553e14 100644
--- a/utils/debugger/SkDebugCanvas.cpp
+++ b/utils/debugger/SkDebugCanvas.cpp
@@ -24,6 +24,8 @@
: 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 @@
// 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 @@
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 @@
// 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 @@
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/utils/debugger/SkDebugCanvas.h b/utils/debugger/SkDebugCanvas.h
index 705f49a..aad768b 100644
--- a/utils/debugger/SkDebugCanvas.h
+++ b/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 @@
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 @@
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