aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-10-17 17:56:10 +0000
committerGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-10-17 17:56:10 +0000
commit32bbcf828d66ad244fa25b468bc3a229e531491f (patch)
treea06033b7e1f2ad4799c587c9553659655cb485e1 /src
parentc2cc1dbe818c8a5a699fbe18c4fc79b9d93daa94 (diff)
Add texture filtering override to debugger
Diffstat (limited to 'src')
-rw-r--r--src/utils/debugger/SkDebugCanvas.cpp50
-rw-r--r--src/utils/debugger/SkDebugCanvas.h11
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